我可以将哪种模式用于具有复杂规则的游戏?

时间:2015-04-05 11:38:05

标签: java design-patterns

我正在使用 MVC 模式在Java中创建基于回合制的2D多人游戏(无AI)棋盘游戏,其中有很多规则和条件,我无法弄清楚实现它们的良好模式,例如:

  • 玩家可以从12个池中选择一个角色:它们之间有相似之处,但每个角色可以移动不同,可以使用不同的物品等。
  • 基于角色可能已经不同的移动能力可以在游戏期间通过使用物品(仅一转)或在某些事件之后(对于所有游戏)而改变。 例如,移动3个单元而不是2个。

根据所选的游戏模式,所有这些规则可能会有所不同,这也可能会改变获胜条件和一些游戏策略。

哪种模式可能适用于此?特别是不同角色可以拥有不同的行为,这也取决于游戏的游戏模式状态

我知道关于游戏模式的问题已经有很多问题,但我找不到合适的东西。

2 个答案:

答案 0 :(得分:2)

如果我必须设计这个游戏,我会尝试识别隐藏在问题陈述中的不同对象,如下所示:

  

玩家可以从12个池中选择一个角色

嗯。所以我需要PlayerCharacter课程。

  

他们之间有相似之处,但每个角色都可以移动   不同的是,可以使用不同的项目

确定。因此,每个Character都有一些共同的行为,但字符也可能具有与常见行为不同的其他行为。让我们为Character中的每个行为添加Character中的方法。

但是那种仅适用于特定类型角色的行为呢?好的,所以我绝对需要一种在运行时为我的角色添加行为的方法。

Hmmmm。让我们创建一个名为interface的{​​{1}},其中包含一个名为.. umm ..的方法。让我们创建几个实现此接口的类并实现behaviorve方法。

到目前为止一切顺利。我们有一个Behavior类,可用于实例化12个字符中的一个。我们有一个Character层次结构,用于在角色之间不常见的其他行为。我们现在需要使这两个类一起工作,以便我们可以在运行时添加行为。在我的整个职业生涯中,我被告知有利于作文而不是继承。所以我想我会通过在Behavior中添加have-a引用来制作字符Behavior Behavior。这个模式有一个名称..这是Character模式。

上述解释中最重要的一点是,你没有看问题并说Strategy。相反,您想出了一个关于您的设计将会是什么样子的初稿并说出what design pattern can I apply?

我在这个答案中没有涉及很多要求。这个答案的想法是向您解释您可以提出的思维过程,以便提出您的设计初稿并不断进化,而不是在开始时过度设计。

答案 1 :(得分:0)

看看ECS(实体组件系统)架构模式和DDD方法。 DDD专为具有复杂域逻辑的应用程序而创建,游戏通常具有它。

一些有用的链接: http://en.wikipedia.org/wiki/Entity_component_system http://en.wikipedia.org/wiki/Domain-driven_design

要完全理解DDD,您必须阅读Eric Evans的书,名为Domain Driven Design。