2012-07-25 84 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