2012-07-03 52 views
0

我有簡潔的描述它是什麼,我試圖做的,這是傷害我的尋找答案的能力有點麻煩中的另一個GUI方法。我會盡量具體與我的問題,如果有人可以給出一個建議或點我的東西,研究方向,我會非常感激it.Tr試圖調用不同方法的C#

我試圖程序的GUI版本卡牌遊戲Dominion在不同的卡片上會產生不同的結果和選擇。許多這類卡片有類似的開始選擇(例如,從你的手中選擇一張卡片並將其丟棄/看着敵手),但是有不同的結局選擇(例如,升級卡片/將卡片丟棄給另一個玩家)。在玩卡時,程序查找唯一的數字卡代碼並開始執行特定於該卡的代碼。

這裏就是我掛了:

我想有一個監聽用戶的輸入內唯一的卡碼更普遍的方法,但我不斷收到錯誤。理想情況下,我可以做一個 'buttonclicked' 事件中類似

for(int i = 0; i < totalPlayers; i++) 
{ 
    showEnemyHand(i); 
} 

for(int i = 0; i < totalPlayers; i++) 
{ 
    thiefEffect(i); 
} 

( 「播放卡」 按鈕,專)的showEnemyHand(int)和thiefEffect (int)方法會等待用戶輸入,存儲響應,然後直接返回到它所調用的for循環,但它不像我原先希望的那樣容易。

我最痛苦的是從不知道我應該在尋找什麼。我一直在閱讀事件處理和代表,我不確定那是我需要的。任何人都可以向我指出我需要學習的方向,或者給我提供我想要解決的問題,以便我可以更輕鬆地進行搜索。 (當然,幫助我解決它也將不勝感激= D)

謝謝一堆! Jake

回答

0

對於基於命令行的遊戲,使用continuations/coroutines的語言,或者可能在多線程應用程序中,showEnemyHand等會阻止用戶輸入,您的解決方案將會很好。對於基於GUI的遊戲而言,事件驅動架構實際上最適合您,所以原則上我建議您多瞭解一下。

但是,如果你真的想要使用循環,我建議然後閱讀約threadingblocking calls。一旦你理解了這些概念,你應該能夠:

  1. 創建一個單獨的線程來託管你的循環;
  2. 創建一個將阻止執行,直到用戶輸入內容(請參閱鏈接問題中的示例);
  3. 使用,在您的回調用戶輸入迴路鎖:
    1. 在循環的開始,你就等着你的鎖;
    2. 當用戶輸入一些東西時(您會使用事件處理程序檢測 - 請參閱您使用的特定GUI框架的文檔),保存選擇哪個動作並釋放鎖定;
    3. 循環將自動繼續,讀取保存的動作並執行迭代,直到它再次到達相同的點並等待另一個用戶輸入。

不管這種方法比使用事件驅動的邏輯編碼規則的難易,這是值得商榷的。關於coroutines也可以這麼說(雖然經驗不足,我不能說)。我給的指針應該可以幫助你開始。

+0

太棒了。非常感謝。我可能無法說出它是否可以工作幾天,但當我得到它時,我會分享我的結果。這聽起來像我正在尋找的那種東西,謝謝。 – doktorjake

相關問題