4

我正在尝试使用 Visual C# 2010 对 Pokemon 集换式卡牌游戏进行编程,但遇到了一个小问题。我有三个对象:

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

Form1 : 显示给玩家的窗口。显示允许玩家查看游戏的所有信息,并允许玩家与游戏互动。

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

为了让事情继续进行,游戏会引发一个“PriorityChanged”事件,让玩家和 AI 都知道优先级已经改变以及哪个人收到了它(在 EventArgs 中)。表格在日志中报告此信息并酌情显示消息:“等待您”和“等待对手”。computerAI 使用它来决定它是否应该运行它的逻辑。我遇到的问题是,当事件引发时,AI 被告知并运行其逻辑(打牌等),这导致玩家获得优先权并引发另一个 PriorityChanged 事件,AI 得到并且什么也没做(这是正确的)。然后表单一个接一个地得到两个 PriorityChanged 事件,但顺序错误。

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

这个解决方案有效,但我觉得它是错误的。有没有更好的办法?

4

1 回答 1

0

我怀疑发生的事情如下:

PriortyChanged (Start)
  AI -> Process
  AI -> Raise Priority Changed
    Priority Changed (Start)
      AI -> DoNothing
      UI -> Process
    Priority Changed (End)
  UI -> Process
PriorityChanged (End)
于 2012-07-25T22:33:33.920 回答