C#:实现一个Action +类事件系统

时间:2016-03-17 21:31:39

标签: c# events priority-queue

我在C#中编写了一个黑手党(狼人)风格的游戏引擎。写出扩展黑手党游戏的逻辑,模型:

玩家(演员)有一个或多个角色,角色包含一个或多个技能。能力可以是静态的,触发的或激活的(类似于魔法聚会)并且具有" MAction"具有0个或更多目标(其顺序可能很重要)以及其他修饰符。有些出现在夜间阶段的早期阶段,而其他阶段则由优先级表示。

通过将它们放在优先级队列中并解析最重要的队列,解除其关联事件(可以在队列上放置更多操作,主要是由于触发能力)然后实际执行一个函数来解决分段。

我用这种方法看到的问题是,在这种机制中,没有办法通过事件取消MAction,我认为没有明确的方法来解决它。我应该如何实现一个系统,以便可以取消任何一个MActions或者具有更高优先级的响应最终执行/延迟初始MAction?

提前致谢。我花了很长时间思考(并绘制图表)这一点,无法克服这个障碍。

2 个答案:

答案 0 :(得分:1)

是否可以实现由每个MAction函数检查的取消堆栈,并且只有在您尝试执行的MAction不在该堆栈中时才执行。这样一旦弹出一个动作,它只会在没有被取消的情况下做一些事情。

答案 1 :(得分:1)

我理解的情况:

  

你有一系列事情发生在复杂的规则,它决定了顺序发生了什么,顺序决定了什么事情决定效果的质量/幅度。

首先,为了让您的生活更轻松,我建议您限制您的玩家在行动解决之前完成所有动作。即使稍后放弃此模型,也应该使您更容易调试和解决操作。如果以后的操作可以撤消早期操作的影响,尤其如下例所示,则尤其如此:

  

戴夫转变为狼人,因为他触发了Full Moon能力。然后凭借狼人的力量,他跳过一堵墙,咬住了巴菲。在巴菲去世之前,她激活了她的时间逆转能力,并且在他跳过墙壁之前杀死了戴夫。

无论如何,您的困境让我觉得您需要使用rules engine 1 NRulesimplement your own。规则引擎的主要目标是根据您的业务逻辑订购/丢弃发生的事情。

接下来,将这些操作放入队列/列表中。这些操作将针对目标应用,直到业务规则告诉您停止(Werewolf Dave死亡)或者没有任何其他操作要应用。一旦你停止,战斗/行动的结果就会报告给用户。

还有其他方法可以实现您的目标,但我认为这将为您提供实现目标的可行途径。

1:我从未使用过这个库,所以我不知道它是否有用。