【发布时间】:2014-12-31 18:54:04
【问题描述】:
我正在尝试用 Java 编写自己的国际象棋游戏。我已经开始编写课程,我的高级想法如下:
我有一个包含这些字段的 Piece 类:
private String name;
private String color;
最初我打算为每个棋子设置一个 x 和 y 坐标,但这似乎更像是棋盘的属性。这让我...
我有一个 Board 类,其字段如下:
Piece[][] myBoard = new Piece[8][8];
我不确定我应该在哪里/如何跟踪碎片的位置。到目前为止,我只有一个 Piece 对象的二维数组。但是,我认为这会带来一些挑战。例如,假设用户点击一块,想要移动它。我需要确定移动是否有效,为此,我需要棋子所在的当前格子。
如果我有每个棋子的 x 和 y 坐标,我将更新两个地方的游戏状态(在 Board 类的 2d 数组中)以及当前棋子的 x 和 y 坐标。这似乎很糟糕......
有什么建议吗?
感谢您的帮助, 马里格斯
【问题讨论】:
-
这有点取决于解释,但您可能会考虑的一种方法是让棋盘由正方形而不是棋子组成。然后每个正方形可能会或可能不会容纳一块。然后,棋盘将负责根据所选棋子和用户尝试移动到的方格来确定移动是否有效。所以至少在我看来,棋盘控制着一切,棋子不知道它们在哪里,但也许只是具有指定移动尝试的有效偏移量的函数。
-
这是一个相当广泛的问题,因此很难回答。我会说名称和颜色绝对不应该是字符串。而是使用枚举。
enum Name { PAWN, ROOK, KNIGHT, BISHOP, KING, QUEEN }enum Color { BLACK, WHITE }. -
我同意在 固定网格 场景中将位置排除在棋子之外 - 棋盘有棋子,棋子本身只是一个值。包含棋子的“单击”网格单元由棋盘内的偏移量确定。
-
在我看来,这件作品应该有一个坐标来由董事会解释。老实说,棋盘和都不能移动棋子。应该有一个单独的类,例如
ChessGame或ChessRules。如果你做了类似的事情,那么你可以轻松地使用相同的类来处理棋子和棋盘,然后如果你想说实现检查器,你只需创建一个CheckersGame。 -
我想我的部分困惑源于如何连接 myBoard 和实际的 GUI。也许这似乎无关,但与@Dtor 建议的实现,是否有一些 setUp 方法循环遍历二维数组并为我的二维数组中的每个正方形对象创建可点击的 GUI 正方形?