我试图了解如何以面向对象的方式进行设计和思考,并希望从社区中获得有关此主题的一些反馈。以下是我希望以面向对象的方式设计的国际象棋游戏的示例。这是一个非常广泛的设计,在此阶段,我的重点只是确定谁负责哪些消息以及对象之间如何交互以模拟游戏。请指出是否存在设计不良的因素(耦合度高,内聚力不良等)以及如何对其进行改进。
国际象棋游戏具有以下类别
- 板
- 播放器
- 片
- 广场
- 国际象棋游戏
董事会由正方形组成,因此可以使董事会负责创建和管理Square对象。每块也都在一个正方形上,因此每块也都有对其所在正方形的引用。(这有意义吗?)。然后,每一块负责将自己从一个正方形移动到另一个正方形。Player类拥有对他拥有的所有作品的引用,并且还负责其创建(玩家应该创建Pieces吗?)。播放器有一个方法takeTurn,该方法又调用属于棋子类的movePiece方法,该方法将棋子的位置从其当前位置更改为另一个位置。现在,我对董事会班级究竟应负责什么感到困惑。我假设需要确定游戏的当前状态并知道游戏何时结束。但是当一块改变的时候 的位置板应该如何更新?它是否应该在存在的碎片上保持独立的正方形阵列,并且随着碎片的移动而更新?
同样,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();
}
我不清楚董事会的状态将如何更新。作品应该对董事会有参考吗?责任在哪里?谁拥有什么参考?请帮助我提供您的意见,并指出此设计中的问题。我故意不关注任何算法或游戏玩法的更多细节,因为我只对设计方面感兴趣。我希望这个社区能够提供宝贵的见解。
takeTurn()
如果p1的举动结束了游戏,则p2不应该呼叫。不太挑剔的评论:我觉得给玩家white
和打电话更自然black
。