2013-09-21 14 views
-1

我已經在這裏呆了很長一段時間,我似乎無法解決遊戲的動態。我可以使用狀態設計模式解決此卡片遊戲應用程序嗎?

因此,基本上,這款遊戲在我的國家Truco中非常流行。我會嘗試用下面的要點來解釋它,但無論如何,在我解釋之後的粗體段落對於遊戲結構是什麼而言是非常簡單和簡單的,因此,請隨意跳到這一點。

  • 每位玩家輪流輪流,並且在每一回閤中,玩家1的 示例都可以玩牌並玩一個動作。
  • 動作A有點像撲克出價,它提高了贏家通過贏得比賽贏得的點數 ,玩家2必須決定是否他們摺疊/輸掉遊戲,跟隨挑戰或反擊出價,並提高賭注。
  • 還有另一種類型的動作,讓我們稱之爲動作B,如果玩家1稱它爲玩家2並拒絕接受它,不像動作A,遊戲不是 結束,玩家2簡單地失去了一些點遊戲結束。人們也可以解決這個問題。
  • 在一個回合中,玩家最多可以調用兩個動作,但他永遠不會調用已經在遊戲中被調用的動作。
  • 每一回合結束時玩家都會玩牌。

所有這些對於不瞭解遊戲的人來說都是非常混亂的信息。總而言之,總共有6個回合,每個回合都由一個玩家玩他的卡片結束,並且在每個回合本身中,這兩個玩家之間有一些信息交換,包括玩家輪到它的可能性呼叫,另一方必須接受或拒絕。除此之外,當比賽結束時,比賽本身並沒有結束,比賽通過贏得比賽和挑戰直到其中一個達到30分。

我開始嘗試使用while循環進行設置,但由於循環從不停頓並等待onClickListeners,所以很容易失敗。 然後,我張貼了這個問題:How can I handle player turns in Android?

我開始對狀態設計模式做了一些研究,並有是,正對工作在過去幾天。我有一個遊戲本身的課程:GameTruco。 A TrucoState Class和TrucoState的10種不同實現。在GameTruco內部,我擁有所有這些不同狀態的實例,以及我需要跟蹤的所有不同變量,玩家可以執行的兩個操作,其旋轉方向以及輪次。因此,在我的GameTruco中,我所有的選項(不同的國家和稱爲這些國家的不同方法)只考慮可以調用不同挑戰後的遊戲狀態,但不要考慮自己玩牌。我不知道如何處理這個問題。另外,當我完成設計時,我並不完全明白我將如何與Button的onClickListeners混合。

我真的很感激,如果任何人都可以告訴我如何解決這個問題,或者通過推薦改變我的狀態模式或者另一種解決紙牌遊戲動態的方式。

回答

1

狀態模式可能是這個問題的一個很好的解決方案。

我GameTruco只考慮了不同的挑戰可以被稱爲在比賽結束後的狀態,但不考慮的卡本身

播放狀態是否只考慮該輪到誰和目前的賭注是什麼等等,然後卡可以被認爲是與國家分開的。你需要有邏輯其他地方跟蹤卡和如何確定誰贏了(這也許還更新狀態)

另外,我不完全知道我將如何混合這當我完成設計時,我的按鈕的onClickListeners。

你的點擊監聽器代碼應該是狀態改變的地方。

實施例:

//listener code implementation 
//user has decided to raise... 

int raiseAmount = ... // perhaps passed in thru listener or from UI objects 
State currentState; //current state before raise 

currentState = currentState.player1Raises(raiseAmount); 
//now state is for player 2 to decide what to do 

//update UI to let player 2 decide what to do given current State 
相關問題