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