我正在尝试用Java编写自己的国际象棋游戏。我已经开始编写类,并且我的高级想法如下:
我有一个与这些领域的计件班:
private String name;
private String color;
Run Code Online (Sandbox Code Playgroud)
最初,我将为每个零件设置一个x和y坐标,但这似乎更像是董事会的财产。带我去...
我有一个具有此类字段的Board类:
Piece[][] myBoard = new Piece[8][8];
Run Code Online (Sandbox Code Playgroud)
我不太确定我应该在哪里/如何跟踪零件的位置。到目前为止,我只有一个二维的Piece对象数组。但是,我认为这将带来一些挑战。例如,假设用户单击了一块,想要移动它。我需要弄清楚该移动是否有效,为此,我需要该棋子所在的当前方块。
如果每个零件都有x和y坐标,那么我将在两个位置(在Board类的2d数组中)和当前零件的x和y坐标处更新游戏的状态。好像不好
有什么建议么?
感谢您的帮助,Mariogs
我可以提供帮助,因为我已经用 Java 编写了一个完整的国际象棋引擎,您可以在这里找到
有几点需要考虑:
与其让您的棋盘成为 8x8 的棋子数组,不如使用 64 个Tile的一维数组。该类Tile可以是抽象的并具有两个子类,OccupiedTile和EmptyTile。每个图块可以有一个整数coordinate,编号为 0 到 63,并且OccupiedTilesPiece上也有一个 。
Originally I was going to have an x and y coordinate for each piece but that seems like it's more a property of the board. Which brings me to...
Run Code Online (Sandbox Code Playgroud)
对于一个片段来说,“知道”它的位置很方便,因此用片段中的整数字段来跟踪它,恕我直言,并不是一件坏事。
Piece还应该有子类,如Knight、Bishop、Pawn、Rook、Queen和King。这样他们的toString()方法就可以返回 的固定值pieceName,而不是将其作为成员字段进行跟踪
最后,为什么不调用枚举Alliance来跟踪白棋或黑棋。 String对于这项工作来说非常脆弱,因为调用者可以向它传递任何它真正想要的值。请参阅我的联盟版本。
我在我的程序中创建了这样的一个片段:
King king = new King(Alliance.BLACK, 4);
Run Code Online (Sandbox Code Playgroud)
我认为这是非常可读的。
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |