Java-Gaming.org    
Featured games (91)
games approved by the League of Dukes
Games in Showcase (576)
games submitted by our members
Games in WIP (498)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Why doesn't this work again??  (Read 821 times)
0 Members and 1 Guest are viewing this topic.
Offline CyanPrime
« Posted 2009-11-22 08:34:09 »

Okay, it's been a while, but I'm thinking about getting back into programming.

Anyway, This code takes the variable data from it's own class instead of it's child classes even when called from the child class. How do i get it so it uses the child's variable data instead of it's own when called by the child?

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
public class TestRPG1 {

   static Player hero;
   static Enemy dragon;
   
   public static void main(String[] args) {
      hero = new Player();
      dragon = new Enemy();
     
      while(dragon.hp > 0){
         int choice = (int) (Math.random() * 2);
         
         if(choice == 0)
            hero.attack(dragon);
         
         else
            hero.magic(dragon);  
      }
     
      System.exit(0);

   }

}


1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
public class Combatant {
   int hp = 100;
   int mp = 100;
   int attack = 15;
   int magic = 25;
   int defence = 15;
   int damage = 0;
   String name = "null";
   
   public void attack(Combatant target){
      damage = (int) (Math.random() * attack);
      System.out.println(name + " attacked the " + target.name + " for " + damage + " damage!");
      target.hp -= damage;
      System.out.println(target.name + " has " + target.hp + " HP left!");
   }
   
   public void magic(Combatant target){
      damage = (int) (Math.random() * magic);
      System.out.println(name + " shot a fireball at " + target.name + " for " + damage + " damage!");
      target.hp -= damage;
      System.out.println(target.name + " has " + target.hp + " HP left!");
   }
}


1  
2  
3  
public class Enemy extends Combatant{
   String name = "Dragon";
}


1  
2  
3  
public class Player extends Combatant{
   String name = "Hero";
}
Offline adon_y_coya

Senior Newbie





« Reply #1 - Posted 2009-11-22 09:25:36 »

I think that in the way you're doing it, you are hiding the parent data member with a child data member, of which the parent has no knowledge, so parent's data member is called instead in parent's method.

Try this instead, using parent's data member to hold the information:
1  
2  
3  
4  
5  
6  
public class Enemy extends Combatant{
   public Enemy() { name = "Dragon"; }
}
public class Player extends Combatant{
   public Player () { name = "Hero"; }
}
Offline DzzD
« Reply #2 - Posted 2009-11-22 15:37:25 »

EDIT: oups sorry same answer as above Smiley ... I should have read better


the goal ov overloading is to not redefine existing properties method when not neceessary, so you should not redefin the name string but rather initialise it in the constructor.
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
public class Combatant 
{
 protected String name;
}

public class Enemy extends Combatant
{
 public Enemy()
 {
  super();
  this.name="Dragon";
 }
}

Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline JL235

JGO Coder


Medals: 10



« Reply #3 - Posted 2009-11-22 19:34:53 »

IMHO you should use constructors for this and just pass the name up.
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
public class Combatant {
   private int hp;
   private int mp;
   private int attack;
   private int magic;
   private int defence;
   private int damage;
   private String name;
   
   public Combatant()
   {
      this( "null" );
   }
   
   public Combatant(String name)
   {
      tihs.name = name;
      hp = 100;
      mp = 100;
      attack = 15;
      magic = 25;
      defence = 15;
      damage = 0;
   }
   
   public void attack(Combatant target){
      damage = (int) (Math.random() * attack);
      System.out.println(name + " attacked the " + target.name + " for " + damage + " damage!");
      target.hp -= damage;
      System.out.println(target.name + " has " + target.hp + " HP left!");
   }
   
   public void magic(Combatant target){
      damage = (int) (Math.random() * magic);
      System.out.println(name + " shot a fireball at " + target.name + " for " + damage + " damage!");
      target.hp -= damage;
      System.out.println(target.name + " has " + target.hp + " HP left!");
   }
}

1  
2  
3  
4  
5  
6  
public class Enemy extends Combatant{
   public Enemy()
   {
      super( "Dragon" );
   }
}

1  
2  
3  
4  
5  
6  
public class Player extends Combatant{
   public Player()
   {
      super( "Hero" );
   }
}

Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

xsi3rr4x (15 views)
2014-04-15 18:08:23

BurntPizza (13 views)
2014-04-15 03:46:01

UprightPath (27 views)
2014-04-14 17:39:50

UprightPath (12 views)
2014-04-14 17:35:47

Porlus (29 views)
2014-04-14 15:48:38

tom_mai78101 (51 views)
2014-04-10 04:04:31

BurntPizza (110 views)
2014-04-08 23:06:04

tom_mai78101 (211 views)
2014-04-05 13:34:39

trollwarrior1 (179 views)
2014-04-04 12:06:45

CJLetsGame (185 views)
2014-04-01 02:16:10
List of Learning Resources
by Longarmx
2014-04-08 03:14:44

Good Examples
by matheus23
2014-04-05 13:51:37

Good Examples
by Grunnt
2014-04-03 15:48:46

Good Examples
by Grunnt
2014-04-03 15:48:37

Good Examples
by matheus23
2014-04-01 18:40:51

Good Examples
by matheus23
2014-04-01 18:40:34

Anonymous/Local/Inner class gotchas
by Roquen
2014-03-11 15:22:30

Anonymous/Local/Inner class gotchas
by Roquen
2014-03-11 15:05:20
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!