C# c语言中的多事件#

C# c语言中的多事件#,c#,winforms,events,C#,Winforms,Events,我正试图用Visual C#2010为口袋妖怪交易卡游戏编程,但遇到了一个小问题。我有三个目标: 游戏:处理游戏的所有数据和规则 表单1:向播放器显示的窗口。显示允许玩家查看的有关游戏的所有信息,并允许玩家与游戏交互 计算机AI:此对象跟踪计算机应该知道的内容并保存AI的逻辑 为了让事情继续进行,游戏会引发一个“PriorityChanged”事件,让玩家和AI都知道优先级已经改变,以及哪个人收到了优先级(在事件参数中)。表单在日志中报告此信息,并根据需要显示消息:“等待您”和“等待对手”。计算

我正试图用Visual C#2010为口袋妖怪交易卡游戏编程,但遇到了一个小问题。我有三个目标:

游戏:处理游戏的所有数据和规则

表单1:向播放器显示的窗口。显示允许玩家查看的有关游戏的所有信息,并允许玩家与游戏交互

计算机AI:此对象跟踪计算机应该知道的内容并保存AI的逻辑

为了让事情继续进行,游戏会引发一个“PriorityChanged”事件,让玩家和AI都知道优先级已经改变,以及哪个人收到了优先级(在事件参数中)。表单在日志中报告此信息,并根据需要显示消息:“等待您”和“等待对手”。计算机用它来决定是否应该运行它的逻辑。我遇到的问题是,当事件被引发时,AI被告知并运行其逻辑(扑克牌等),这导致玩家获得优先级并引发另一个优先级更改的事件,AI得到了该事件,但没有处理该事件(这是正确的)。然后表单一个接一个地获得两个优先级更改事件,但顺序错误

为了解决这个问题,我将“PriorityChanged”事件分为两部分,“PriorityChanged”和“PriorityRecieved”。表单更新“PriorityChanged”事件上的显示,AI在“PriorityRecieved”事件上运行其逻辑


这个解决方案奏效了,但我觉得它错了。有更好的方法吗?

我怀疑发生的情况如下:

PriortyChanged (Start)
  AI -> Process
  AI -> Raise Priority Changed
    Priority Changed (Start)
      AI -> DoNothing
      UI -> Process
    Priority Changed (End)
  UI -> Process
PriorityChanged (End)

可能是程序员的问题。stackexchange.com(因为它是主观的)我同意。既然你的改变奏效了,这里没什么好回答的。我只是想确保我没有跌入某种反模式,或者没有其他标准的方式来完成我想做的事情。这正是发生的事情。处理PriorityChanged事件的代码会引发另一个PriorityChanged事件。当我建立了两个人工智能来对抗对方时,这就成了一个更大的问题。游戏结束时,调用堆栈上有大约300个项目。