我正在开发一个有趣的角色扮演游戏并练习设计模式。我希望玩家能够将自己变成不同的动物。例如,德鲁伊可能能够变形为猎豹。现在我正计划使用装饰器模式来做到这一点,但我的问题是 - 我如何做到这一点,以便当德鲁伊处于猎豹形态时,他们只能获得猎豹的技能?换句话说,他们应该无法使用正常的德鲁伊技能。

使用装饰者模式,似乎即使在猎豹形态下,我的德鲁伊也可以使用他们的正常德鲁伊技能。

class Druid : Character
{
   // many cool druid skills and spells
   void LightHeal(Character target) { }
}

abstract class CharacterDecorator : Character
{
    Character DecoratedCharacter;
}

class CheetahForm : CharacterDecorator
{
    Character DecoratedCharacter;
    public CheetahForm(Character decoratedCharacter)
    {
       DecoratedCharacter= decoratedCharacter;
    }

    // many cool cheetah related skills
    void CheetahRun()
    {
       // let player move very fast
    }
}

现在使用类
Druid myDruid = new Druid();
myDruid.LightHeal(myDruid); // casting light heal here is fine
myDruid = new CheetahForm(myDruid);
myDruid.LightHeal(myDruid); // casting here should not be allowed

嗯...现在我想起来了,除非该类被降级,否则 myDruid 是否无法向我们提供 Druid 类的法术/技能?但即使是这种情况,是否有更好的方法来确保此时 myDruid 被锁定在所有与 Druid 相关的法术/技能之外,直到它被转换回 Druid (因为目前它在 CheetahForm 中)

最佳答案

你不应该 在类里面把你的法术和技能当作方法。它们应该是可通过 Character(或可能是 Creature)界面访问的 Spell 和 Skill 对象的集合。然后,您的 CheetaForm 可以覆盖 getSkills getSpells 方法以返回新修改的适当技能集合。

关于c# - 在角色扮演游戏中暂时将玩家转变为动物的设计注意事项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2220448/

10-10 10:35