0

这是对这个问题的跟进。上下文是相同的,因此略读可能会有用。几天来我一直在集思广益,但一无所获,所以我放弃并来到这里。

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

棘手的部分是可以添加很多额外的行为,而且它们可能有些随意。把它们想象成“被动技能”。当你击中目标时,也可能会有一些行为,比如获得统计数据,但仅限于某些类型的战斗。

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

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

我不想发布一堵巨大的代码墙,所以如果我的系统有任何特定部分,你想看看,请在评论中提问。

4

1 回答 1

0

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

例如,当您受到伤害时,您可能 1. 拥有将伤害减半的能力,2. 装备可以进一步减少伤害的物品,3. 向攻击者返还一些伤害,以及 4. 获得一些统计点数.

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

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

  1. 从基础伤害开始
  2. 应用由攻击触发的攻击者效果
  3. 应用攻击触发的防御者效果
  4. 应用所有攻击者的增加伤害的先天能力
  5. 应用所有攻击者的伤害增加装备能力
  6. 应用所有防御者的增加护甲的先天能力
  7. 应用所有防御者的护甲增加装备能力
  8. 应用防御触发的攻击者效果
  9. 应用防御触发的防御者效果
  10. 受到伤害
  11. 应用由伤害触发的攻击者效果
  12. 应用由伤害触发的防御者效果

这是从臀部,我不知道你的规则系统。

一旦你有了这个,考虑为一个战斗建模,包括一个来源、目标、一个(开始的)伤害、一个攻击效果列表和一个防御效果列表。这些效果应该使用 OnAttack()、OnApplyInnate()、OnApplyEquipment()、OnDamaged() 等编码为模板(模板方法模式)。然后您可以在战斗 reolution 的各个阶段迭代效果,让每个人都有机会在适当的时候应用它的效果。

于 2012-09-10T15:23:24.410 回答