如果您听说过Nethack,您会熟悉诸如polymorph之类的游戏功能。
在Java游戏中,小怪(英雄,怪物)被声明为Java类,它们都扩展了Char.java类的基础。我正在尝试向此基类添加一个新字段:一个公共current_form字段,该字段应该是到表示您或怪物当前形式的类的链接。
Char.java基类将具有Attack(),move()和其他一些方法,这些方法将分别触发current_form.attack(),current_form.move(),其中current_form被替换为类名。
因此,如果我有Hero类(扩展Char):
Hero h = new Hero();
我攻击:
h.attack();
它会触发一个
do_attack()
方法作为我的当前表单(从名为我的当前表单的类中读取),如果我的表单是Rat.class
,它将分别触发Rat.do_attack()
。您如何实现这种行为?
最佳答案
可能是类似的东西
public class Hero extends Char {
Char polymorphedTo;
public void attack() {
if(polymorphedTo != null)
polymorphedTo.attack();
else
normalAttackCode();
}
}
这提供了一种简单的方法,可以将任何适当的操作重定向到您要多态化的表单的代码。