我正在使用MVC模式创建Java 2D回合制多人(无AI)棋盘游戏,该模式中有很多规则和条件,我想不出一个很好的模式来实现它们,例如:
玩家可以从12个池中选择一个角色:它们之间有相似之处,但每个角色的动作可能不同,可以使用不同的物品,依此类推。
根据角色的不同,移动能力可能会在游戏过程中通过使用项目(仅转一圈)或在某些事件之后(对于整个游戏)而发生变化。例如,移动3个单元而不是2个。
根据所选的游戏模式,所有这些规则可能会有所不同,这也可能会更改获胜条件和某些游戏策略。
哪些模式可能适用于此?特别是根据游戏模式和游戏状态,不同角色可能具有不同行为的事实。
我知道关于SO上的游戏模式已经有很多问题,但是我找不到适合的方法。
尽管这个问题的措辞很好,但似乎您正在要求某人为您设计整个应用程序。 现在忘记设计模式。 您能否为您的游戏提供一组初始的类和组件,并将其作为问题的一部分发布? 这个想法是逐步改进您的设计,而不是大爆炸。
感谢您的反馈,我将使用Im正在处理的UML图尽快编辑我的问题。
没问题。 一旦您想到了初步设计,您很有可能不需要回到这里来回答。 我已经发布了一个答案,以帮助您进行思考,而不是提供整个解决方案。
如果必须设计这款游戏,我将尝试识别出问题语句中隐藏的不同对象,如下所示:
The player can choose a character from a pool of 12
嗯所以我将需要一个Player和Character类。
They have similarities between them but each character could move
differently, could use different items
好。因此,每个Character都有共同的行为,但角色也可以具有与共同行为不同的其他行为。让我们在"字符"中为在字符之间常见的每种行为添加方法。
但是,仅适用于特定类型字符的行为又如何呢?好的,所以我绝对需要一种在运行时向我的角色添加行为的方法。
嗯让我们创建一个名为Behavior的interface,其中包含一个名为.. umm .. behavior的方法。让我们创建几个实现此接口并实现行为方法的类。
到目前为止,一切都很好。我们有一个Character类,可用于实例化12个字符之一。我们有一个Behavior层次结构来处理字符之间不常见的其他行为。现在,我们需要使这两个类一起工作,以便可以在运行时添加行为。在我的整个职业生涯中,有人告诉我,主张继承而不是继承。所以我想我要通过在Character中添加Behavior引用来制作字符have-a Behavior。此模式有一个名称。.这是Strategy模式。
上面的解释中最重要的一点是,您没有看问题就说what design pattern can I apply?。取而代之的是,您提出了设计的初稿,并说this looks like the XYZ pattern
我在此答案中没有涉及很多要求。这个答案的意思是向您解释可以用来提出设计初稿并不断发展的思想过程,而不是一开始就过度设计。
看一下ECS(实体组件系统)的架构模式和DDD方法。 DDD是专门为具有复杂域逻辑的应用程序而创建的,而游戏通常都有它。
一些有用的链接:
http://en.wikipedia.org/wiki/Entity_component_system
http://en.wikipedia.org/wiki/Domain-driven_design
为了完全理解DDD,您必须阅读Eric Evans的《域驱动设计》一书。
我在回答中正是在谈论这个。 通过识别不同的对象(也称为域),通过迭代不断发展设计
是的,我阅读了您的答案。 我只是认为指向DDD是解决该问题的好方法,因为您不可能在一个SO答案中解释所有内容。
我同意 。 虽然,我相信没有必要阅读有关域驱动设计的书来知道如何应用它。 如果人们愿意接受他们的设计会随着时间的推移而发展,并愿意采取迭代的方法来构建应用程序,那么设计模式和DDD等所有其他方面都是次要的。 做比知道更重要。