两个类

时间:2017-02-18 01:21:39

标签: java constructor dependencies

我想编写一个小文字冒险/地下城爬行类型的游戏。目前我有课程CreaturePlayerEnemy。类PlayerEnemyCreature

的子类

我想让敌人的等级取决于玩家的等级。因此,例如,敌人的等级应始终比玩家的等级高1级。因此,当玩家等级为4时,你应该只能面对5级的敌人。

我的想法是将这样的东西放在Enemy类的构造函数中:

 public Enemy(String name, int hp, int atk, int exp) {
    super(name, Player.getLevel + 1, hp, atk);
    this.exp = exp;
 }

但显然不允许这样做。现在我不知道如何实现这个结果。我对Java缺乏基本的了解,但我愿意学习。

我的代码目前看起来像这样。为了更好的可读性,我离开了吸气剂和制定者。

public class Creature {

   private String name;
   private int    level;
   private int    hp;
   private int    atk;

   public Creature (String name, int level, int hp, int atk){
      this.name = name;
      this.level = level;
      this.hp = hp;
      this.atk = atk;
   }
}


public class Player extends Creature {

   private int currentEXP;
   private int expBar;

   public Player(String name) {
      super(name, 1, 100, 10);
      this.currentEXP = 0;
      this.expBar = 50;
   }
}


public class Enemy extends Creature {

   int exp;

   public Enemy(String name, int level, int hp, int atk, int exp) {
      super(name, level, hp, atk);
      this.exp = exp;
   }
}

1 个答案:

答案 0 :(得分:1)

首先,private修饰符使子类中的level不可用。要解决这个问题,您可以将更改private更改为protected(或无/默认),也可以提供可访问的getter方法(int getLevel() { return level; })。

您的Enemy构造函数采用level参数,因此要实现player level + 1功能,您只需传递player.getLevel() + 1,或者传递player.getLevel()并让构造函数负责添加1。

使用这些类的方法(现在假设main)看起来像这样:

public static void main(String[] args) {  
    Player p = new Player("Player1");  
    Enemy e = new Enemy("Enemy1", p.getLevel() + 1, 100, 10, 40);  
}  

要澄清一下,Player.getLevel + 1不起作用的原因是因为Player是一个类,但您需要一个Player 对象(即结果调用new Player(...))来引用实例字段或方法,例如getLevel