- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试用 Java 编写自己的国际象棋游戏。我已经开始编写类(class),我的高级想法如下:
我有一个包含这些字段的 Piece 类:
private String name;
private String color;
最初我打算为每个棋子设置一个 x 和 y 坐标,但这似乎更像是棋盘的一个属性。这让我想到...
我有一个包含如下字段的 Board 类:
Piece[][] myBoard = new Piece[8][8];
我不太确定我应该在哪里/如何跟踪碎片的位置。截至目前,我只有一个 Piece 对象的二维数组。但是,我认为这会带来一些挑战。例如,假设用户点击了一 block ,想要移动它。我需要弄清楚移动是否有效,为此,我需要棋子所在的当前方格。
如果我有每个棋子的 x 和 y 坐标,我将在两个位置(在 Board 类的二维数组中)和当前棋子的 x 和 y 坐标更新游戏状态。这似乎很糟糕......
有什么建议吗?
感谢您的帮助,马里奥格
最佳答案
我可以提供帮助,因为我已经用 Java 编写了一个完整的国际象棋引擎,您可以找到 here
需要考虑的几件事:
与其让你的棋盘是一个 8x8 的棋子阵列,为什么不用一个 64 Tile's 的一维阵列呢? . Tile
类可以是抽象的,有两个子类,OccupiedTile
和 EmptyTile
。每个瓦片可以有一个整数坐标
,编号为 0 到 63,OccupiedTile
也有一个 Piece
。
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...
一 block 很方便“知道”它的位置,因此在一 block 中用一个整数字段跟踪它,恕我直言,并不是一件坏事。
Piece
还应该有子类,例如 Knight
、Bishop
、Pawn
、Rook
、Queen
和 King
。这样他们的 toString()
方法可以为 pieceName
返回一个固定值,而不是将其作为成员字段跟踪
最后,为什么不使用名为 Alliance
的枚举来跟踪白棋或黑棋。 String
对于这项工作来说非常脆弱,因为调用者可以传递它真正想要的任何值。查看我的 Alliance 版本.
我在我的程序中创建了一个这样的片段:
King king = new King(Alliance.BLACK, 4);
我认为它非常可读。
关于java - Java 国际象棋游戏的 OOP 设计(棋子/棋盘交互问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27725199/
我正在尝试使用 GUI 的 NetBeans IDE 在 Java 中制作国际象棋游戏,但我无法使棋子停留在棋盘上方,当我尝试时,棋盘就会被推开。我对这两个图像都使用了标签。如何让棋子停留在棋盘上方而
编辑:要查看JS函数的工作版本,see the accepted answer in this followup thread 编辑:我使用的最终正则表达式是这样的: var pattern = /(
我一直在用 C++(使用 MVS2010)开发一个控制台国际象棋游戏,我似乎遇到了一个我自己无法解决的问题。问题是我需要在控制台中显示以下棋子: http://en.wikipedia.org/wik
我正在尝试用 Java 编写自己的国际象棋游戏。我已经开始编写类(class),我的高级想法如下: 我有一个包含这些字段的 Piece 类: private String name; private
我是一名优秀的程序员,十分优秀!