2017-05-08 94 views
2

我編寫一個紙牌遊戲(宇野/茅茅型),我有這樣的設計問題:在紙牌遊戲玩家和甲板方法

甲板包含卡兩重疊,其中一個顯示面,另一個顯示背部。當遊戲進行中並且玩家擲出一張牌時,它應該進入「面孔」堆棧。但是,當遊戲結束時,最後一名玩家的牌應該回到「後退」牌堆上。

1)如果該甲板有兩種方法用於添加卡(addToFacesStack和addToBacksStack)

2)如果該甲板具有addCards方法和決定本身其中堆疊的卡片應該去到(在甲板必須知道比賽的狀態 - 正在進行/完成)?另外,當遊戲正在進行時,並且玩家(知道規則並選擇相應玩牌的玩家)將牌扔到「牌面」堆疊上,如果牌組「重新檢查」玩家的牌移動有效嗎?

在此先感謝您的建議!

卡羅琳

回答

1

我想你應該問的問題是:應該模型瞭解遊戲的遊戲邏輯或只是狀態?

如果,那麼你需要包括你的模型裏面的遊戲邏輯,因此你可以只addCards方法和Deck將自行決定添加網卡(一個或多個)。但是,在這種情況下,遊戲模型和遊戲邏輯緊密結合。如果您使用相同的模型來進行遊戲的其他變體(使用不同的邏輯),則此選項將不合適。

如果NO,那麼你就可以按照Boundary - Control - Entity設計模式。在這裏,你需要有單獨的方法來將卡添加到第一個或第二個堆棧。並將遊戲邏輯編碼到您的控制器對象中,這將知道遊戲的規則。使用這種模式,您可以重複使用相同的模型,並根據正在玩的遊戲使用不同的控制器。

關於你的問題:

另外,當比賽進行中,運動員(誰知道的規則,並選擇卡相應地播放)拋出卡(S)到「面」棧,應牌組「重新檢查」球員的移動是否有效?

在這種情況下,您可以有一個控制器來檢查移動是否有效。無需編碼模型內部的邏輯。

+0

非常感謝您的寶貴意見! – Caroline

+0

不客氣! @Caroline – ahoxha

+0

我選擇了你的答案的「NO」選項,並提出這個問題:[question](http://stackoverflow.com/questions/43977777/cards-and-deck-in-a-card-game -inherit有或沒有) – Caroline