C#:实现一个Action +事件

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

玩家(Actor)拥有一个或多个角色,角色包含一个或多个能力。 技能可以是静止,触发或激活(类似万智牌),并且有一个“MAction”和0个或更多目标(其顺序可能很重要)以及其他修饰符。 有些发生在夜间阶段的早期阶段,其他阶段发生在优先阶段。

通过将队列放入优先级队列并解析队列,解除队列的相关事件(可以在队列中放置更多动作,主要由于触发功能),然后实际执行一个功能来解决。

我用这种方法看到的问题是,无法通过此机制中的事件取消MAction,并且我看不到任何明确的解决方法。 我应该如何实施一个系统,以便取消任何一个系统,或者具有更高优先级的响应最终执行首先/延迟初始状态?

提前致谢。 我花了相当一段时间思考(并绘制图表),无法完全克服这个障碍。


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


据我所知,情况如下:

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

首先,为了让你的生活更轻松,我建议你限制你的球员在动作解决发生之前做出所有动作。 即使这种模式在稍后被放弃,它也会让您更容易地调试和解决这些操作。 如果后面的操作可以撤消早期操作的影响,如下例所示,这一点尤其正确:

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

无论如何,你的困境让我觉得你需要使用像NRules1这样的规则引擎,或者实现你自己的规则引擎。 规则引擎的主要目标是根据业务逻辑命令/放弃发生的事情。

接下来,您将这些操作放入队列/列表中。 这些行动是针对目标应用的,直到业务规则告诉你停止(狼人戴夫死亡)或者没有更多的行动可以应用。 一旦你停下来,战斗/行动的结果就会报告给用户。

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


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

链接地址: http://www.djcxy.com/p/68073.html

上一篇: C#: Implementing an Action+Event

下一篇: How to prevent a C# System.Timers timer event from blocking subsequent events?