我仍在学习Java,并且对编程语言非常了解。我正在寻找一个简单的Java游戏,其中我有几个友好而又敌对的单位,每个单位都有许多我希望能够根据每个单位具有的能力进行更改的属性。到目前为止,这是我的单位类型;军医,军官,游侠,小敌人和大敌人,所有这些都是课程。每个单元将具有以下属性:
static int health = 1000;
static int power = 100;
static int moves = 6;
static int movement = 8;
我相信我正在寻找的属性更改可以通过调用方法来实现,但是,我想创建一个模块化方法,该方法可以简单地针对一个单元并影响更改。这是一个我想根据医生能力做的事的例子:
public static void Heal() {
Medic.moves = Medic.moves - 2;
(target).health = (target).health + 200;
}
在上面的示例中,我不确定如何实现“目标”功能。这基本上是我的问题的症结所在,如何将这种方法创建为模块化的,这样我就不必像下面这样在方法中写出专门说明目标名称的方法了?
public static void Heal() {
Medic.moves = Medic.moves - 2;
Ranger.health = Ranger.health + 200;
}
public static void Heal() {
Medic.moves = Medic.moves - 2;
Officer.health = Officer.health + 200;
}
public static void Heal() {
Medic.moves = Medic.moves - 2;
Medic.health = Medic.health + 200;
}
非常感谢您的帮助!
答案 0 :(得分:1)
使用属性创建一个抽象类Unit
(但绝对不要使用静态)。
为每种单位创建具体的类。
创建允许执行操作的方法,例如Heal()
。
例如:
public abstract class Unit {
private int health;
private int power;
private int moves;
private int movement;
protected Unit(int health, int power, int moves, int movement) {
health = health;
power = power;
moves = moves;
movement = movement;
}
}
public class Medic extends Unit {
public Medic() {
super(1000, 100, 6, 8);
}
public Medic(int health, int power, int moves, int movement) {
super(health, power, moves, movement);
}
public void Heal(Unit target) {
moves -= 2;
target.health += 200;
}
}
然后,您可以简单地用具体类型创建所有单元(您可以实现允许指定各种属性值的其他构造函数),然后在实例上调用方法。
答案 1 :(得分:-1)
您应该将单位作为参数传递给您的方法,并且所有单位都应该是父类的子代。如果我们将父类命名为Unit
,则它应该看起来像这样(因为所有单元的属性都相同):
public class Unit {
private int health = 1000;
private int power = 100;
private int moves = 6;
private int movement = 8;
//getters and setters
}
所以现在您的方法将如下所示:
public void Heal(Unit unit) {
Medic.moves = Medic.moves - 2;
unit.setHealth(unit.getHealth + 200);
}