首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用最少的代码更改单元和属性

使用最少的代码更改单元和属性
EN

Stack Overflow用户
提问于 2018-12-29 23:19:11
回答 2查看 53关注 0票数 1

我还在学习Java,并且对编程语言有很基本的了解。我希望创建一个简单的Java游戏,我有几个单位,友好和敌人,每个都有一些属性,我想能够改变的基础上,每个单位的能力。到目前为止,这些是我的单位类型:医疗兵,军官,游骑兵,小敌人和大敌人,所有这些都是职业。每个单元将具有以下属性:

代码语言:javascript
复制
static int health = 1000;
static int power = 100;
static int moves = 6;
static int movement = 8;

我相信我正在寻找的属性改变可以通过调用方法来实现,然而,我想创建一个模块化的方法,它可以简单地针对一个单元并影响一个改变。这是一个我想要做的基于医术能力的例子:

代码语言:javascript
复制
public static void Heal() {
    Medic.moves = Medic.moves - 2;
    (target).health = (target).health + 200;
}

在上面的例子中,我不确定如何实现“目标”功能。这基本上就是我的问题的症结所在,我如何才能将这个方法创建成模块化的,这样我就不必像下面这样编写一个在方法中明确声明目标名称的方法了?

代码语言:javascript
复制
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;
}

非常感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-29 23:34:06

使用您的属性创建一个抽象类Unit (但您根本不应该使用static )。

为每种单元创建具体的类。

创建允许执行操作的方法,如Heal()

例如:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-12-29 23:35:48

您应该将单元作为参数传递给您的方法,并且您的所有单元都应该是父类的子类。如果我们将父类命名为Unit,它应该如下所示(因为所有单元的属性都是相同的):

代码语言:javascript
复制
public class Unit {
private int health = 1000;
private int power = 100;
private int moves = 6;
private int movement = 8;
//getters and setters
}

所以现在你的方法看起来像这样:

代码语言:javascript
复制
public void Heal(Unit unit) {
    Medic.moves = Medic.moves - 2;
    unit.setHealth(unit.getHealth + 200);
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53970777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档