首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂博弈算法的设计模式

问复杂博弈算法的设计模式
EN

Stack Overflow用户
提问于 2012-09-08 03:47:00
回答 1查看 501关注 0票数 0

这是this question的后续行动.上下文是一样的,因此略读可能是有用的。我已经集思广益好几天了,但一无所获,所以我要放弃,来到这里。

我想知道在创建像我在这里描述的系统时,设计模式会起什么作用。让我说我有一个战斗算法,可以有任意数量的战斗双方。我们先找出是谁袭击了谁,然后就执行了。

棘手的部分是,有许多额外的行为可以添加,它们可能有点武断。把他们想象成“被动技能”。当你击中你的目标时,你也可以获得属性增益,但只有在某些类型的战斗中。

我前面的问题显示了Decorator是如何失败的。答案给出了策略模式,但我并不急于编写十几种不同类型的策略,然后为每种策略编写几个具体的类。即便如此,如果我需要一种全新的行为,而这完全不同于我已经拥有的任何东西,我仍然必须违反开放封闭原则。也会出现这样的情况,我需要一次组合多个策略,这可能会导致修饰策略或复合策略。举个例子,当你受到伤害时,你可能1.有能力将伤害减半,2.装备一个能进一步降低伤害的物品,3.向攻击者返还一些伤害,4.获得一些属性点。

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

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

EN

回答 1

Stack Overflow用户

发布于 2012-09-10 15:23:24

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

举个例子,当你受到伤害时,你可能1.有能力将伤害减半,2.装备一个能进一步降低伤害的物品,3.向攻击者返还一些伤害,4.获得一些属性点。

如果第3(伤害反射)先发生,然后是#4 (你可以获得数据,甚至是防守),然后是#1和#2。在这种情况下,防守者已经最大限度地提高了他的防守能力。

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

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

我不知道你的规则是怎么回事。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12327841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档