只是为了玩一下,我试图通过命令行与两名玩家进行回合制战斗游戏。每个玩家控制最多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
答案 0 :(得分: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
来引用performOn(Monster)
,但这取决于所有移动是否共享某些您想要子类化的常用功能(第一种方法) ,使用超类)或者如果Move也可以是其他内容,您只需要performOn(Monster)
方法签名。例如,如果你有类似武器的东西,那就有一个移动:
public class FancyWeapon extends Weapon implements Move
{
}
答案 1 :(得分:1)
我不确定这是不是你的意思,但interface
可能是你想要的?
界面如下所示:
public interface Move() {
void performOn(Object o);
String getMoveName();
}
那个例子,你会做一系列的课程:
public class BreatheFire implements Move {
@Overrides
public void performOn(Object o) {
....
}
}
。
希望有所帮助!
答案 2 :(得分: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);
}
}