2012-07-25 85 views
4

我想使用Visual C#2010编程口袋妖怪交易卡游戏,但我遇到了一个小问题。我有三个对象:c中的多个事件#

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

Form1:显示给玩家的窗口。显示玩家可以看到有关游戏的所有信息,并允许玩家与游戏进行互动。

ComputerAI:该对象追踪计算机应该知道并掌握AI的逻辑。

为了让事情继续下去,游戏引发了一个“PriorityChanged”事件,让玩家和AI都知道优先级已经发生变化,并且哪个人收到了它(在EventArgs中)。表单将这些信息报告在日志中,并根据情况显示消息:“等待你”和“等待对手”。 computerAI使用它来决定它是否应该运行它的逻辑。我碰到的问题是,当事件发生时,人工智能被告知并且运行其逻辑(玩纸牌等),这导致玩家获得优先权并且引发了另一个PriorityChanged事件,AI获取并且没有做任何事情(这是正确)。然后,Form按顺序依次获得了两个PriorityChanged事件。

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

该解决方案奏效,但它让我觉得不对。有没有更好的办法?

+2

可能是programmers.stackexchange.com一个问题(因为它是主观的) – Nathan 2012-07-25 11:22:40

+0

我同意。既然你的改变奏效了,这里没有太多答案。 – hometoast 2012-07-25 11:31:11

+0

我只是想确保我没有陷入某种反模式,或者没有其他标准方法来完成我正在尝试做的事情。 – user1253723 2012-07-25 11:34:13

回答

0

我怀疑什么发生如下:

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

这正是发生了什么事情。处理PriorityChanged事件的代码会引发另一个PriorityChanged事件。当我建立两个AI来互相对抗时,这成为一个更大的问题。游戏以约。调用堆栈上的300个项目。 – user1253723 2012-07-26 07:44:59