2013-10-23 122 views
3

我對編程技巧越來越有信心,所以我決定重新開始我以前開始的紙牌遊戲。這一方案的關鍵是現在我有程序流程,變量,條件體面的把握等等,我想加深我OOP用紙牌遊戲OOP設計Quesiton

的理解

所以我需要在面向對象的設計

一些建議我卡牌遊戲將有5類:

  1. 主要
  2. 甲板(具有-A卡的ArrayList)
  3. 播放器(具有-A卡的卡的ArrayList對象REC從甲板對象eived)
  4. 經銷商

我想知道如果這將是適當的OOP使經銷商類的接口。所有玩家都應該能夠扮演經銷商的角色,但不用說,每張牌只有一個經銷商。即使在任何給定回合中的8個Player對象中有7個不會使用他們實現的方法,並使玩家類實現經銷商可以執行的方法(例如dealGame())當時被認爲是經銷商?或者,讓dealGame()方法屬於Deck類並調用套牌來處理遊戲會更好嗎?對不起,如果這是一個愚蠢的問題,但我有點粗略的OOP的原則,並希望一些建議,學會做的第一次。

我也想過讓經銷商擴展玩家,但我認爲這是錯誤的,因爲我需要玩家在飛行中承擔經銷商的角色,而不是以不可變的方式聲明爲經銷商對象。在這種情況下 - 如果經銷商延伸播放器 - 我想我需要宣佈遊戲的所有玩家爲經銷商。

所以基本上我問:

  1. 如果你犯了個紙牌遊戲,這5類,你會令經銷商類的接口,其餘的普通班,爲什麼或者爲什麼不呢?
  2. 我一般在OOP的正確軌道還是完全失去了?
+1

你似乎大多在正確的軌道上。雖然我不確定'Dealer'類。也許一個更好的想法可能是一個'Game'類,它跟蹤元元素。它處理卡組的實際交易情況,跟蹤哪些玩家已經摺疊等等,以及哪個玩家是經銷商,保持得分等。 – nhgrif

+0

我在現實生活中知道玩家交易,但是實際上是否存在交易在這個真實生活的模擬中?我的意思是玩家身份作爲玩家以任何方式與他們的身份作爲經銷商聯繫在一起 –

+1

對於我來說,dealGame()等方法屬於其他一些與遊戲相關的類。玩家不是經銷商就只是布爾標誌的問題,這會讓他們有權在某種Game或Table對象上調用這些方法。 –

回答

3

你有很好的方法,但仍有一些工作要做:)。所有的課都很好,但德萊爾不是。

首先 - 如果玩家是經銷商一個人,其他人是經銷商,我沒有看到擴展類或接口的一個點。其實,從一開始,我就不會讓任何玩家成爲經銷商,這讓事情變得複雜。

如何處理這個問題的最簡單和最好的方法是創建5.Game。遊戲有甲板和所有的球員,它的工作原理與經銷商類似。它等待玩家迴應,當它應該顯示卡片等。

如果你真的想讓玩家成爲經銷商,它會更復雜:)。那麼你也需要遊戲類,因爲Game必須決定誰作爲經銷商開始,它應該帶走或給玩家經銷商的權利(以及我沒有看到它的重點,但如果你想... :)) 。

如何做到這一點? GamePlayer dealer變量。如果應該有類似registerDealer(Player player)的方法。然後你需要某種接口在GamePlayer之間進行通信。 如果您想要Player擁有Game的所有責任,您可以使用Visitor pattern。 (它允許dealer「潛入」遊戲實例內部並執行任何公共方法可以做的事情)。

否則,您可以讓Game詢問dealer該做什麼並等待玩家輸入。它應該通過調用方法如dealer.askWhatToDo()並使用返回的值來執行操作。它允許驗證輸入...但是如果我是對的,撲克中的有效輸入總是隻有一個,所以我沒有看到任何區別,如果Game本身決定要做什麼......

我看到的唯一原因是如果dealer可以洗牌或提高基數或類似的東西,那麼它可以完成...或者,如果你想用撲克模擬撲克遊戲,玩家和經銷商可以在現實生活中做非有效的事情:)。

+1

事實上,第9個實體可以從8個玩家中的任何一個完成單獨處理 –

+0

這似乎是繼續進行的最佳方式。 Game的想法有 - 一個類型爲Player的經銷商實例變量是非常有意義的,其餘的想法也是如此。感謝您的建議! – Justin

1

這真的取決於很多程序如何工作的,你希望每個班能夠做什麼,以及如何每個對象的作品的生命週期(例如可以在播放器成爲後來的幾輪經銷商)。

我對你寫的第一印象是,你需要一個「玩家」和「經銷商」繼承的基類「人」,但這只是一個猜測,處理有限的信息。

1

經銷商並不是真正的特殊類型的玩家。這只是玩家一次有特殊責任的一個例子。我認爲你在正確的軌道上,但是你可能想爲你正在玩的特定遊戲創建一個類。

假設你正在寫一個撲克遊戲。在這種情況下,經銷商偶爾會影響比賽的順序(取決於風格)。但是如果你在玩War,那麼莊家只是一個交出牌而你真的不在乎的人。在這種情況下,「誰是經銷商」和「經銷商應該如何處理遊戲」的概念是遊戲本身的責任,而不是玩家。