我从这里读了一个教程链接!这给了我一个基本的棋子布局,但现在我的棋子跳过其他棋子我可以知道如何检查源和目的地广场之间是否有一些中间硬币.
举个简单的例子,假设您有一个代表国际象棋棋盘的8x8矩阵.虽然你可以存储对象(并获得一个不错的面向对象的设计模式,其所有的棋子延长ChessPiece
,我只是去承担他们所有的int
S对于现在).
public class Board
// this is the actual representation of the board
private int[][] board = new int[8][8];
// define some useful constants
public static final int EMPTY = 0;
public static final int PAWN = 1;
public static final int HORSEY = 2;
// ...
public Board() {
initializeBoard();
}
public int getPiece(int row, int column) {
return board[row][column];
}
private void initializeBoard() {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
board[row][col] = EMPTY;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我们有棋盘和棋子的基本表示(留给了你设定的块的实际初始配置),我们怎么确定,我们可以移动?那么,现在,坚持简单的蛮力方法.你知道如何通过整板循环寻找一块的行/列,所以说,你会发现一个骑士是row=3
,column=5
我将作为写(3,5)
.然后,因为一个骑士可以水平移动1个方格,垂直移动2个,或者水平移动2个,垂直移动1个,我们看到它可能会移动到以下位置:
所以,现在你必须设立董事会,找到其中的某些片段的位置,并确定双方在那里他们可以移动的,什么是定位在这些空间中的所有组件.
需要更多的东西,然后你拥有一切:
确定方式是什么: 假设我尝试将女王从(1,1)移动到(8,8).您需要确定它将采用的路径是通过(2,2),(3,3),...并检查每个方块.每件作品都有所不同,但遵循相同的一般方法:
实际上移动碎片: 在这里你需要更新内部板表示,将前一个方块改为空,将新方块更改为该块.
捕获碎片: 实现捕获碎片的规则(基本上与移动碎片相同),并跟踪捕获的碎片.
游戏玩法: 如果你想让它变得可玩,你需要代表玩家,转向它,并生成一个简单的用户界面.
边缘情况: 确保不要在算法中运行板边缘.(ArrayIndexOutOfBoundsException异常)
由于从头开始制作游戏非常困难,我建议你慢慢开始.实现电路板表示,并检查一个像JUnit这样的测试库,这样你就可以使用测试作为接口,直到你有了.例如,编写测试以确保一个部件可以在给定特定板配置的情况下从一个正方形移动到另一个正方形,然后实现该功能,并且在测试通过时您的代码按照您认为应该执行的操作具有高可信度.