这是this question的后续行动.上下文是一样的,因此略读可能是有用的。我已经集思广益好几天了,但一无所获,所以我要放弃,来到这里。
我想知道在创建像我在这里描述的系统时,设计模式会起什么作用。让我说我有一个战斗算法,可以有任意数量的战斗双方。我们先找出是谁袭击了谁,然后就执行了。
棘手的部分是,有许多额外的行为可以添加,它们可能有点武断。把他们想象成“被动技能”。当你击中你的目标时,你也可以获得属性增益,但只有在某些类型的战斗中。
我前面的问题显示了Decorator是如何失败的。答案给出了策略模式,但我并不急于编写十几种不同类型的策略,然后为每种策略编写几个具体的类。即便如此,如果我需要一种全新的行为,而这完全不同于我已经拥有的任何东西,我仍然必须违反开放封闭原则。也会出现这样的情况,我需要一次组合多个策略,这可能会导致修饰策略或复合策略。举个例子,当你受到伤害时,你可能1.有能力将伤害减半,2.装备一个能进一步降低伤害的物品,3.向攻击者返还一些伤害,4.获得一些属性点。
那么,一个有经验的建筑师会在这里做什么呢?很多游戏都实现了这些系统,所以我很好奇到底是哪种模式或模式组合在这里工作得很好。
我不想发布大量的代码,所以如果我的系统中有任何特定的部分,您只想在评论中询问。
发布于 2012-09-10 15:23:24
这是一个很大的问题,需要了解你的游戏机制。但我会从这个重新开始。第一步是确保您有一个良好的定义和记录的操作顺序,然后将其转换为一个框架或模板为您的战斗解决算法。例如:
举个例子,当你受到伤害时,你可能1.有能力将伤害减半,2.装备一个能进一步降低伤害的物品,3.向攻击者返还一些伤害,4.获得一些属性点。
如果第3(伤害反射)先发生,然后是#4 (你可以获得数据,甚至是防守),然后是#1和#2。在这种情况下,防守者已经最大限度地提高了他的防守能力。
您按照特定的顺序列出了这些步骤,但是为什么是?您必须定义您的规则,以便您知道每一步何时应用(攻击和防御)。只有这样,你才能创建一个系统来重新解决战斗。例如:
我不知道你的规则是怎么回事。
一旦你有了这个,考虑建模一个战斗,包括一个源,目标,一个(开始)伤害,一个列表AttackEffects,和一个DefenseEffects列表。这些效果应该与OnAttack()、OnApplyInnate()、OnApplyEquipment()、OnDamaged()等一起编码为模板(模板方法模式)。然后,您可以在战斗恢复的各个阶段迭代这些效果,让每个人都有机会在适当的时间应用其效果。
https://stackoverflow.com/questions/12327841
复制相似问题