【发布时间】:2015-07-26 22:36:39
【问题描述】:
我正在编写一个 Java 国际象棋游戏并试图整理设计。以下是我目前的课程:
游戏:由 2 个玩家对象和一个棋盘对象组成
玩家:
Board:由 Square 对象的 2d 数组 (8 x 8) 组成,每个对象上可能有/可能没有一块
国王、王后、车、主教、骑士、兵:
片段:上述片段的超类,共享功能在这里
这是我不喜欢的:我的 Square 类中有一个名为“board”的字段,这样我就可以引用给定正方形所属的 board。我不喜欢这种设计,因为它会导致克隆问题。
所以我想在不做这种回溯的情况下重写片断类中的一些功能。板子能够访问它的每个方块是很棒的,但我不想让 Square 类有一个 getBoard() 函数。
这是一个我需要重写的函数示例:
public Square getSquareOneMoveAway(Square start, int heightChange, int widthChange) {
Square candidateSquare = start.getBoard().getNearbySquare(start, heightChange, widthChange);
if (candidateSquare != null) {
if (candidateSquare.isEmpty()) {
return candidateSquare;
} else if (! candidateSquare.getPiece().getColor().equals(start.getPiece().getColor())) {
return candidateSquare;
}
else {
return null;
}
}
else {
return null;
}
}
请注意,在我的 Player 类中,我有如下方法:
canMovePiece(Square start, Square end, Board board), movePiece(Square start, Square end, Board board)等
我是否应该将此方法移动到 Board 类中,这样我就可以访问 board 对象而不必从 Square 转到 board?
非常感谢任何想法, 布莱曼
【问题讨论】:
-
这可能更适合 Code Review,尽管 Code Review 的人会因为我这样说而对我大喊大叫。 “板”就是这样,一块板。它不知道上面播放的是什么。 chess 棋盘可能...改变这些能力的国际象棋变体。有很多个选项。
-
@DaveNewton 我们只在您出于这个原因投票关闭时才会大喊大叫,以及向 CR 推荐公然 CR 偏离主题的帖子。感谢您仍然有勇气推荐CR!
-
我认为您可以对您的代码进行全面审查。包含所有相关类的代码,让Code Review的人施展魔法吧! (假设您已实现您的设计并且它按预期工作)