复杂游戏算法的设计模式

时间:2012-09-08 03:47:01

标签: php design-patterns game-engine

这是this question的后续行动。上下文是相同的,所以略读一个可能是有用的。我已经集思广益了几天,无处可去,所以我放弃了,来到这里。

我想知道在创建像我在那里描述的那样的系统时会发生什么样的设计模式。假设我有一个战斗算法,每侧可以有任意数量的战斗员。首先,我们找出谁攻击了谁,然后它被执行了。

棘手的部分是可以添加许多其他行为,并且它们可能有点武断。把它们想象成“被动技能”。当你击中目标时,也可能会有一些行为,比如在某些类型的战斗中获得统计数据。

我之前的问题显示了Decorator如何失败。答案提出了战略模式,但我并不急于编写十几种不同类型的策略,然后为每种策略编写几个具体的类。即便如此,如果我需要一种完全不同于我已经完全不同的全新行为,我仍然必须违反开放封闭原则。还有一些情况我需要一次合并多个策略,这可能会导致装饰策略或复合策略。一个例子是,当你受到伤害时,你可以1.拥有一个能够将伤害减半的技能,2。拥有能够进一步减少伤害的物品,3。对你的攻击者造成一些伤害,以及4.获得一些属性点

那么有经验的建筑师会在这做什么?很多游戏都实现了这些系统,所以我很好奇这种模式或模式组合在这里运作良好。

我不想发布大量的代码,所以如果我的系统中有任何特定部分,您只想在评论中提问。

1 个答案:

答案 0 :(得分:0)

这是一个需要了解游戏机制的大问题。但我会从这个重组开始。第一步是确保您有一个明确定义和记录的操作顺序,然后将其转换为frameowkr或模板,用于您的战斗解决算法。例如:

  

一个例子是当你受到伤害时,你可能会有一个伤害   削减伤害的能力,2。有一个装备的项目   进一步减少伤害,3。对攻击者造成一些伤害,4。   获得一些统计点。

如果#3(伤害反射)首先发生,然后#4(你获得统计数据,甚至可能防御pts),那么#1和#2。在这种情况下,防守者已经将伤害最大化并且潜力最大化了他的防守。

您按特定顺序列出了这些步骤,但为什么?您必须定义规则,以便知道每个步骤何时应用(攻击和防御者)。只有这样你才能创建一个系统来解决战斗问题。例如:

  1. 从基础伤害开始
  2. 应用攻击触发的攻击者效果
  3. 应用受攻击触发的后卫效果
  4. 应用所有攻击者的伤害增加先天技能
  5. 应用所有攻击者的伤害增加装备技能
  6. 应用所有后卫的增加天赋的能力
  7. 应用所有后卫的护甲增加装备技能
  8. 应用防御触发的攻击者效果
  9. 应用防御触发的后卫效果
  10. 受到伤害
  11. 应用受损害触发的攻击者效果
  12. 应用受到伤害触发的后卫效果
  13. 这是嘻哈,我不知道你的规则系统。

    一旦你有了这个,考虑建模一个战斗,包括一个Source,Target,一个(起始)伤害,一个AttackEffects列表和一个DefenseEffects列表。应该使用OnAttack(),OnApplyInnate(),OnApplyEquipment(),OnDamaged()等将这些效果编码为模板(模板方法模式)。然后,您可以在战斗重新解决的各个阶段迭代效果,让每个人都有机会在适当的时候应用它的效果。