如果您听说过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();
    }
}


这提供了一种简单的方法,可以将任何适当的操作重定向到您要多态化的表单的代码。

10-08 02:19