2015-08-28 43 views
-1

我正在使用C#,'連續四'遊戲實現一個小型終端遊戲。實際上我已經完成了實現(遊戲是可玩的),但是我想對面向對象設計進行一些重構。一個小遊戲的類設計

比方說,我有幾個類:遊戲,棋盤,播放器,消息等。存儲關聯對象的信息。與當前的設計和實現一樣,Game對象由Board對象,其他幾個遊戲屬性(當前顏色,下一個顏色,currentTurn等)以及引用到Player對象的玩家列表組成。玩家可以是用戶或CPU,這取決於哪個移動是從用戶輸入派生的或是由某個AIPlayer分別計算的(爲此,我創建了一個從播放器繼承的AIPlayer類,並相應地覆蓋了MakeAMove()方法。

其他設計決策包括擁有帶main()函數的服務器/客戶機類來運行遊戲,接收套接字數據和顯示通知,處理遊戲邏輯並調用其他類的Client/ServerHandler類。如果移動有效或是否獲得點數,則留給遊戲類別,這顯然需要操縱董事會對象。

我現在在做的是決定當玩家做出舉動時會發生什麼。所以我想有2設計這種方法

  1. 遊戲對象需要輸入,並改變自己的狀態(包括更新它的球員應該獲得一個點)作爲遊戲由玩家對象名單, 。

  2. 這是Player對象獲取他的移動(用戶輸入或CPU計算)並更新遊戲狀態。由此,玩家與遊戲之間不存在耦合,並且玩家根據遊戲對象的方法返回的分數更新他的分數。

我的問題是: 我的遊戲使用(1)運行,但如果過什麼(2)更適合思維(即更OO純粹的,有玩家和遊戲之間的較少耦合)。但是如果是(2)使用,那麼我應該如何將遊戲和玩家聯繫起來(即我應該如何將玩家的觀點與遊戲聯繫起來)?

+2

你的問題到底是什麼? –

+0

@WinterMute在推薦任何內容之前,請閱讀該網站上的幫助部分。這是Code Review的主題,因爲沒有代碼需要審查。根據我所能讀到的,代碼甚至沒有完成,O.P.正在問如何寫東西。這是3個脫離主題的原因。 –

+0

http://gamedev.stackexchange.com/ – Bauss

回答

1

這種問題有點太大,不能簡單地提供一個答案。你必須查看你有什麼,並提出重構建議。一本真正幫我實現OOP思維的書是Design Patterns: Elements of Reusable Object-Oriented Software。這是一本很受歡迎的書,我極力推薦它。

關於你的Player以及它是否是AI控制的,你可以使用與他們在俠盜獵車手(GTAV具體),重新裝配或其他一些流行遊戲中所做的類似的方法。無論控制什麼,每個實體都從外部控制。這樣你可以在運行時在播放器和AI之間切換。

有幾種不同的方法可以解決這個問題。一種方法是將某種EntityIntelligence封裝在Player中,這可以根據需要進行擴展(對於玩家和AI)。

最後,用方法1,可能會更好。在這種情況下,這件作品應該向董事會提出更改要求,然後董事會應該相應地進行更改。這樣你就能得到兩全其美的好處!

祝你好運,讓我知道如果有什麼我需要澄清!

+1

一種方法也可以讓角色成爲「木偶」:他們公開方法來執行某些操作。 'Controller'類將控制'Player'。這樣,您可以在多個AI「大腦」,用戶控制之間切換,甚至允許網絡控制(多人遊戲)! –

+0

@IsmaelMiguel我完全同意!這真的是我想說的,但你說得好多了。猜猜這是因爲在電話上的業力... –

+0

@IsmaelMiguel的確,我有一種控制器類,它接收來自遊戲客戶端的消息,提取它的消息代碼(新遊戲,退出,新移動等)和據此調用其他對象 – tab87vn