我还在学习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;
}非常感谢您的帮助!
发布于 2018-12-29 23:34:06
使用您的属性创建一个抽象类Unit (但您根本不应该使用static )。
为每种单元创建具体的类。
创建允许执行操作的方法,如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;
}
} 然后,您可以简单地创建具有具体类型的所有单元(您可以实现额外的构造函数,允许指定各种属性的值),然后在实例上调用这些方法。
发布于 2018-12-29 23:35:48
您应该将单元作为参数传递给您的方法,并且您的所有单元都应该是父类的子类。如果我们将父类命名为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);
}https://stackoverflow.com/questions/53970777
复制相似问题