design-patterns - 为这组对象寻找一个好的设计模式

标签 design-patterns language-agnostic

我最初问的是this question在programmers.stackexchange.com上,因为我认为答案对于stackoverflow来说太主观了。然而评论中Muad'Dib指出了这一点:

this would probably be a better fit for StackOverflow ... This is a direct programming problem-related question and discusses programming solutions. One solution may be equal to another where the choice between them is subjective, but the discussion of the overall problem itself is not as some solutions are clearly not applicable. So this question does have one or a few good answers, whereas questions such as "Which is the best text editor?" does not...

因此,在对情况进行了更多思考(并查看了一些似乎不合适的模式)之后,这是我的困境:

设置

我正在设计一个简单的战斗策略游戏。

  1. 两名战斗人员在一定时间内互相攻击。
  2. 获胜者是时间结束后生命值最高的人。
  3. 战斗过程中玩家不会直接干预。玩家在战斗前为战斗人员定义一些策略,“AI”(宽松使用的术语)决定战斗人员将做什么。
  4. 战斗由一个“滴答作响”的任意计时器组成,战斗人员的攻击速度(除其他外)决定了他们做某事的频率。
  5. 除了战斗对象之外,还有一个“天气”对象,它可以对战斗人员的能力产生一些随机环境影响。
  6. 整个过程每秒循环一次,环境影响和攻击被确定并执行,所有这些都被记录下来,并且日志随后以逐个播放的形式向用户显示。

问题

我不确定哪种设计模式最能让我完成上述任务。我正在寻找一种模式,让我能够增加 future “战斗”的复杂性。可能是通过在战斗中添加更多对象(更多战斗人员,可能是新的环境对象等)

起初我认为观察者模式会起作用。我会有一个代表“观察者/主体”的战斗对象。它跟踪计时器,并且随着计时器的增加,它更新所有参与者观察者对象。然而,许多防御方战斗人员的参数可能会影响攻击方战斗人员的行动,因此该场景中的“观察者”需要互相了解,所以我不确定这是否是正确的方法。

最后,我并不是想完美地确定一个设计模式。也许没有“最适合”。我只是在寻找一个坚实的基础来建立。

最佳答案

试图为相当详细的情况找到一个“正确”的设计模式是徒劳的。设计模式解决特定编程语言中出现的某些常见低级情况 - 不一定存在针对您可能发现的每种可能情况的特定模式,也不一定只使用一种模式来解决您的问题问题。

特别是,这种情况并不是设计模式真正的用途 - 设计模式主要关注类和对象之间的静态关系,而您在这里讨论的本质上是算法。设计模式提供了实现算法的方法,但其本身并不是真正的算法。

这应该非常简单。您有一个运行指定持续时间的 while 循环。每次迭代代表一秒钟的流逝时间,在该迭代中,它将调用战斗中涉及的每个相关对象上的一个或多个方法 - 战斗人员、天气等(有多少个方法以及哪些是一个游戏)设计问题,而不是编程问题。)如果您愿意,这些对象可以来自保存整个上下文的战斗对象。

这里并不真正需要观察者模式,事实上,如果将其从易于理解的迭代过程转变为事件驱动的过程,会使问题变得严重复杂化。如果需要访问各种属性,战斗者可以直接查询另一个战斗者。

关于design-patterns - 为这组对象寻找一个好的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3953809/

相关文章:

c# - MVP 被动 View ——保持 View 数据和模型数据分离

design-patterns - C# 设计模式建议

c++ - 我的 OOP 设计感觉很草率 (C++)

algorithm - 如何检查网格上的选定单元格是否形成 'tunnel' ?

arrays - 次线性算法/找到最后一个不同的元素

c++ - 如何安全地将包含的对象(菜单项)与需要容器(菜单)的 API 同步?

language-agnostic - 继承还是条件?

regex - 查找/替换功能允许边界替换而不是表达式

algorithm - 在嘈杂的数据中寻找公共(public)集

在构造函数中使用 "this"的 Java 双向对象引用