【问题标题】:Multiple events in c# [closed]c#中的多个事件[关闭]
【发布时间】:2012-07-25 11:09:39
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 可能是programmers.stackexchange.com的问题(因为它是主观的)
  • 我同意。由于您的更改有效,因此这里没有太多要回答的问题。
  • 我只是想确保我没有偶然发现一些反模式,或者没有其他标准方法可以完成我正在尝试做的事情。

标签: c# winforms events


【解决方案1】:

我怀疑发生了以下情况:

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

【讨论】:

  • 这正是正在发生的事情。处理 PriorityChanged 事件的代码会引发另一个 PriorityChanged 事件。当我设置两个 AI 互相对抗时,这成为一个更大的问题。比赛以大约结束。调用堆栈上有 300 个项目。
猜你喜欢
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多