我正在制作一个棋盘游戏,它有两种不同颜色的棋子,黑色和红色。
如果玩家用水平或垂直方式围绕对手的棋子,则会移除棋子。这里有一些图片来证明这一点:
我的电路板是一个简单的2d整数数组,其值为0,1或2,具体取决于空格是空的,是红色还是黑色。
这是我到目前为止提出的代码,但是我遇到了越界错误的问题,并且它也没有考虑捕获多个部分。
static final int EMPTY = 0, BLACK = 1, RED = 2, ROW = 9, COLUMN = 9;
board = new int[ROW][COLUMN];
public void captureRedPieces() {
for(int i = 0; i < ROW; i++) {
for(int j = 0; j < COLUMN; j++) {
if(i <= ROW - 2) {
if(board[i][j] == 1 && board[i + 1][j] == 2 && board[i + 2][j] == 1) {
board[i + 1][j] = EMPTY;
}
}
if(i <= COLUMN - 2) {
if(board[i][j] == 1 && board[i][j + 1] == 2 && board[i][j + 2] == 1) {
board[i][j + 1] = EMPTY;
}
}
}
}
}
有人能帮我提出一个更好的捕捉作品的解决方案吗?
答案 0 :(得分:0)
可能您必须将i <= COLUMN - 2
替换为j <= COLUMN - 2
。似乎捕获发生在新的移动之后。如果您知道新件的确切位置,则无需遍历整个板。您只需要检查相同行中的相邻部分以及放置新部件的同一列。