我在C#中编写了一个黑手党(狼人)风格的游戏引擎。写出扩展黑手党游戏的逻辑,模型:
玩家(演员)有一个或多个角色,角色包含一个或多个技能。能力可以是静态的,触发的或激活的(类似于魔法聚会)并且具有" MAction"具有0个或更多目标(其顺序可能很重要)以及其他修饰符。有些出现在夜间阶段的早期阶段,而其他阶段则由优先级表示。
通过将它们放在优先级队列中并解析最重要的队列,解除其关联事件(可以在队列上放置更多操作,主要是由于触发能力)然后实际执行一个函数来解决分段。
我用这种方法看到的问题是,在这种机制中,没有办法通过事件取消MAction,我认为没有明确的方法来解决它。我应该如何实现一个系统,以便可以取消任何一个MActions或者具有更高优先级的响应最终执行/延迟初始MAction?
提前致谢。我花了很长时间思考(并绘制图表)这一点,无法克服这个障碍。
答案 0 :(得分:1)
是否可以实现由每个MAction函数检查的取消堆栈,并且只有在您尝试执行的MAction不在该堆栈中时才执行。这样一旦弹出一个动作,它只会在没有被取消的情况下做一些事情。
答案 1 :(得分:1)
我理解的情况:
你有一系列事情发生在复杂的规则,它决定了顺序发生了什么,顺序决定了什么事情决定效果的质量/幅度。
首先,为了让您的生活更轻松,我建议您限制您的玩家在行动解决之前完成所有动作。即使稍后放弃此模型,也应该使您更容易调试和解决操作。如果以后的操作可以撤消早期操作的影响,尤其如下例所示,则尤其如此:
戴夫转变为狼人,因为他触发了
Full Moon
能力。然后凭借狼人的力量,他跳过一堵墙,咬住了巴菲。在巴菲去世之前,她激活了她的时间逆转能力,并且在他跳过墙壁之前杀死了戴夫。
无论如何,您的困境让我觉得您需要使用rules engine 1 或NRules等implement your own。规则引擎的主要目标是根据您的业务逻辑订购/丢弃发生的事情。
接下来,将这些操作放入队列/列表中。这些操作将针对目标应用,直到业务规则告诉您停止(Werewolf Dave死亡)或者没有任何其他操作要应用。一旦你停止,战斗/行动的结果就会报告给用户。
还有其他方法可以实现您的目标,但我认为这将为您提供实现目标的可行途径。
1:我从未使用过这个库,所以我不知道它是否有用。