1

只是为了玩一点,我正在尝试通过命令行与两名玩家制作一个回合制战斗游戏。每个玩家控制一个怪物,最多有 4 个不同的动作。我已经定义了 Monster 和 Move 类来定义不同的怪物和动作。当玩家使用移动时,我想我想在移动中调用类似 performOn(Monster mon) 的方法来使用。在那个方法中,我想定义动作的实现,因为不是每个动作都会做同样的事情。我很确定 Java 可以做到这一点,但我不完全确定它是如何完成的。对于 Monster 和 Move 类,我有一个内部 Builder 类来避免使用大的构造方法。如果有人对如何执行移动有更好的想法,请随时分享。:)

谢谢!

例子:

// moves is a HashMap<String, Move>
monster1.moves.get("Firebreath").performOn(monster2); // damages monster2
monster2.moves.get("Heal").performOn(monster2); // heals monster2
4

3 回答 3

2

您可以为它创建一个超类,Move并且所有特殊动作都可以扩展它:

public abstract class Move
{
    public abstract void performOn(Monster m);
}

然后扩展:

public class FirebreathMove extends Move
{
    public void performOn(Monster m)
    {
         // do something to Monster
    }
}

或者你可以创建一个接口:

public interface Move
{
    public void performOn(Monster m);
}

你的动作可以实现它:

public class FirebreathMove implements Move
{
    public void performOn(Monster m)
    {
         // do something to Monster
    }
}

在任何一种情况下,您都会引用Move可以调用的 a performOn(Monster),但这取决于所有移动是否共享某种您想要子类化的通用功能(第一种方法,带有超类),或者移动是否也可以是其他东西和你只需要performOn(Monster)方法签名。例如,如果你有类似武器的东西,它有一个移动:

public class FancyWeapon extends Weapon implements Move
{

}
于 2012-08-09T03:16:45.437 回答
1

我不确定这是否是你的意思,但interface可能是你所追求的?

界面如下所示: public interface Move() { void performOn(Object o); String getMoveName(); }

该示例,然后您将创建一系列类: public class BreatheFire implements Move { @Overrides public void performOn(Object o) { .... } }.

希望有帮助!

于 2012-08-09T03:15:01.650 回答
1

你可以有一个 Move 父类(或接口),所以它的工作原理与此类似。

public interface Move{
  public void performOn(Monster m);
}

public Firebreath implements Move{
  public void performOn(Monster m)
  {
    m.takeFireDamage(5);
  }
}

public Heal implements Move{
  public void performOn(Monster m)
  {
    m.healDamage(5);
  }
}
于 2012-08-09T03:15:14.937 回答