【发布时间】:2011-12-09 08:10:58
【问题描述】:
我开始为国际象棋作业制作一个 8 x 8 的方格板。但是,我想知道是否有任何提示可以在 Java 中创建正方形而不是 2D 数组。
其中一项限制是不允许使用二维数组或任何类似的。没有人工智能,只有用户控制。
【问题讨论】:
-
如果不太相似,您可以使用一维数组。
我开始为国际象棋作业制作一个 8 x 8 的方格板。但是,我想知道是否有任何提示可以在 Java 中创建正方形而不是 2D 数组。
其中一项限制是不允许使用二维数组或任何类似的。没有人工智能,只有用户控制。
【问题讨论】:
您可以使用一维数组,例如Figure [] board = new Figure[64],并创建一个简单的 getter/setter 方法来模拟二维:
Figure get(int hor, int vert) {
return board[hor*8+ver];
}
void set(int hor, int vert, Figure f) {
board[hor*8+ver] = f;
}
【讨论】:
您可以使用一维数组或ArrayList,然后除以 8 并使用结果和余数来知道您需要去哪一列和哪一行。
然后您可以反过来获取数组中对应棋盘部分的位置。
【讨论】:
你也可以使用地图:
private Map<String, Figure> board = new HashMap<String, Figure>();
private String positionToString(int hor, int vert) {
return hor + " " + vert;
}
public Figure get(int hor, int vert) {
return board.get(positionToString(hor, vert));
}
public void set(int hor, int vert, Figure fig) {
board.put(positionToString(hor, vert), fig);
}
【讨论】:
std::pair<int,int>?
我没有 Java 的工作知识,我下棋和做一些 Delphi 编程。我不知道 Java 的位操作能力。
但是,我建议你研究Bitboard数据结构并在网上搜索基于它的开源国际象棋引擎。
这在 c++ 世界中是司空见惯的。
【讨论】:
也许你一开始甚至不创建一个正方形就可以侥幸逃脱?
表示棋盘的另一种方法是列出棋子及其各自的坐标。
【讨论】: