我想了解如何以面向對象的方式進行設計和思考,並希望從社區獲得關於此主題的一些反饋。以下是我希望以面向對象方式設計的國際象棋遊戲的一個例子。這是一個非常廣泛的設計,我在這個階段的重點只是確定誰負責什麼消息以及對象如何相互交互來模擬遊戲。請指出是否存在設計不好(高耦合,不良內聚等)的元素以及如何改進它們。面向對象的國際象棋遊戲設計
棋局有以下類
- 局
- 球員
- 件
- 廣場
- ChessGame
董事會由正方形等局可以負責創建和管理Square ob jects。每件作品也放在一個正方形上,因此每件作品也有一個參考它所在的正方形。 (這有道理嗎?)。每件作品都有責任將自己從一個廣場移到另一個廣場。 Player類擁有對他擁有的所有作品的引用,並且也負責其創作(玩家是否應創建作品?)。玩家有一個方法takeTurn,它依次調用一個方法movePiece,該方法屬於片段Class,它將片段的位置從其當前位置改變到另一個位置。現在我很困惑董事會的職責究竟是什麼。我認爲需要確定遊戲的當前狀態,並知道遊戲何時結束。但是,當一塊改變它的位置板應該如何更新?它是否應該維持一個單獨的存在棋子的方塊陣列,並且隨着棋子的移動而更新?
另外,ChessGame主要創建棋盤和選手對象,然後分別創建正方形和棋子並開始模擬。簡單地說,這可能是在ChessGame代碼可能是什麼樣子
Player p1 =new Player();
Player p2 = new Player();
Board b = new Board();
while(b.isGameOver())
{
p1.takeTurn(); // calls movePiece on the Piece object
p2.takeTurn();
}
我對董事會如何的狀態將得到更新不清楚。應該有一個參考董事會?責任在哪裏呢?誰擁有什麼參考?請幫助我提供您的意見,並指出此設計中的問題。我故意沒有專注於任何算法或玩遊戲的更多細節,因爲我只對設計方面感興趣。我希望這個社區能提供有價值的見解。
吹毛求疵的評論:P2不應該叫'takeTurn()如果P1的舉動結束了比賽'。不太挑剔的評論:我覺得把玩家稱爲「白色」和「黑色」更自然。 – 2010-11-12 19:01:14
同意。但正如我所說,我對設計方面更感興趣,以及對於什麼操作以及誰擁有什麼參考,對象應該負責。 – Sid 2010-11-12 19:39:58