Design patterns 狼人(社会演绎)游戏的设计模式

Design patterns 狼人(社会演绎)游戏的设计模式,design-patterns,architecture,software-design,Design Patterns,Architecture,Software Design,我正在尝试开发一个像这样的社会演绎游戏 游戏中有一些角色具有可用和被动的能力。在夜间,玩家可以选择1个可用技能并选择0个或更多目标。在晚上结束时,所有能力同时发生,第二天这些能力的结果是有效的 可用的技能包括:杀死某人,阻止某人当晚使用某个技能,阻止任何技能在某人身上使用 被动能力可以对任何类型的可用能力免疫 我正在寻找一种软件设计模式/架构,以防止不同能力之间的相互依赖。 我很抱歉提出了(可能是)一般性的问题,但我一直在想这个问题。这是一个有趣的问题,正如您所提到的,也是一个非常一般性的问题。

我正在尝试开发一个像这样的社会演绎游戏

游戏中有一些角色具有可用和被动的能力。在夜间,玩家可以选择1个可用技能并选择0个或更多目标。在晚上结束时,所有能力同时发生,第二天这些能力的结果是有效的

可用的技能包括:杀死某人,阻止某人当晚使用某个技能,阻止任何技能在某人身上使用

被动能力可以对任何类型的可用能力免疫

我正在寻找一种软件设计模式/架构,以防止不同能力之间的相互依赖。


我很抱歉提出了(可能是)一般性的问题,但我一直在想这个问题。

这是一个有趣的问题,正如您所提到的,也是一个非常一般性的问题。据我所知,黑手党的游戏有玩家,每个玩家都有一个指定的角色,每个角色都有一个或多个能力(通常为1)。这些能力之间不需要有依赖关系。我们可以通过两种方式模拟一个玩家使用其能力来否定或取代其他玩家的能力的场景:

1) 正确地安排能力的执行。例如,一个扮演黑手党角色的玩家可以使用该技能杀死一个特定的玩家,比如我们将该玩家标记为待杀。但是在同一个晚上,如果一个角色是医生的玩家救了同一个玩家,我们可以取消该玩家被杀的标记,从而通过调用医生的救命能力“晚于”黑手党的杀人能力来否定杀人能力的效果

2) 如果我们不想按正确的顺序执行这些能力,或者我们有一个无法进行排序的场景,那么我们也可以这样做。在一个晚上,能力集是有限的,同一能力可以有多个实例(例如,有3名玩家被指定为医生),但即使在这种情况下,该能力的总实例(在本例中为“拯救”能力)也是有限的。现在,Ability类可以有一个公共方法来使自己挂起。例如,如果一个具有某种特殊角色的玩家拥有这种能力,并且想要阻止黑手党在当晚杀人的能力,那么它可以通过调用中央GameController类上的一个方法来调用他的这种能力,他希望执行他的这种能力。然后,游戏控制器可以对游戏中存在的杀戮能力的有限实例调用suspend方法

因此,在上述两种建模和执行能力的方法中,能力之间没有依赖关系。基本上,这个想法是,一个想要被执行的能力,独立于其他能力向中央游戏控制器注册。GameController控制执行,并在每晚结束时计算最终游戏状态

在每晚开始时,可以创建每个技能的新实例。如果有能力跨越黑夜,那么它们可以这样建模。但在任何情况下,都必须有有限的能力实例

此设计中的一些实体包括玩家、角色、能力、游戏控制器和游戏状态


希望这有帮助

到目前为止,您考虑了哪些解决方案,为什么不满意?另外,你能扩展一下“防止相互依赖”的含义吗?你的问题是离题的,因为它无法回答(太笼统)。@MicheleDorigatti很抱歉,我很难让这个问题更具体。我将编辑这个问题。我所说的相互依赖的意思是,改变一种能力会导致另一种能力崩溃。为什么每个能力都有一个类而它们都有相同的接口或基类还不够呢?