我想编写一个小文字冒险/地下城爬行类型的游戏。目前我有课程Creature
,Player
和Enemy
。类Player
和Enemy
是Creature
。
我想让敌人的等级取决于玩家的等级。因此,例如,敌人的等级应始终比玩家的等级高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;
}
}
答案 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
。