我想编写一些文字冒险/地牢爬行类型的游戏。目前我有类 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 缺乏一些基本的了解,但我愿意学习。
我的代码现在看起来像这样。为了更好的可读性,我省略了 getter 和 setter。
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;
}
}
最佳答案
首先,private
修饰符使得level
在子类中不可用。要解决这个问题,您可以将 private
更改为 protected
(或什么都不做/默认),或者您可以提供一个可访问的 getter 方法 (int getLevel() {返回级别;}
)。
你的 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
object(即调用 new Player(...)
的结果)引用实例字段或方法,例如 getLevel
。
关于java - 两个类之间的属性依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42310030/