Tag: 软件设计

什么是解决相互作用的组合爆炸的最佳方法?

我现在正在做的事情之一与游戏有一些相似之处。 为了说明的目的,我将使用一个虚构的,假设的游戏中的一个例子来解释我的问题。 我们称之为DeathBlaster 4:The Deathening 。 在DB4中,您有许多Ship对象,它们在旅行时会定期和随机地遇到Phenomena 。 给定Phenomenon可能对遇到它的Ship具有零个,一个或多个Effects 。 例如,我们可能有四种Ships和三种Phenomena 。 现象 ========================================== 船舶GravityWell BlackHole NebulaField ———— ————————————– —- RedShip + 20%速度-50%功率-50%屏蔽 BlueShip没有影响无懈可击的死亡效果 GreenShip -20%速度死亡+ 50%盾牌现象 YellowShip死亡+ 50%的力量没有效果 此外, Effects可能会相互Effects 。 例如, GravityWell和NebulaField可以在生成的SpeedEffect和ShieldEffect之间获得某种协同作用。 在这种情况下,协同效应本身就是一种Effect – 例如,可能存在由此交互产生的PowerLevelSynergyEffect 。 除了作用于Ship的Effects集之外,不需要任何其他信息来解决最终结果应该是什么。 你可能会开始看到这里出现的问题。 作为一种天真的第一种方法, 要么每Ship都必须知道如何处理每一个Phenomenon ,或者每个Phenomenon都必须知道每Ship 。 这显然是不可接受的,所以我们希望将这些责任转移到其他地方。 显然,这里至少有一个外部课程,可能是某种Mediator或某种Visitor 。 但是最好的方法是什么? 理想的解决方案可能具有以下特性: 就像添加新Phenomenon一样容易添加新Ship 。 不产生影响的交互是默认的,不需要额外的代码来表示。 约定优于配置。 了解Effects如何相互影响,并能够管理这些交互以决定最终结果。 我想,我已经决定了我的方法,但我很想知道最佳设计共识是什么。 […]