我有一个功能可以检查我的黑白棋游戏中的有效动作。我查看未占用的空间,并检查任何 8 个方向上的相邻空间是否是相反的部分。(如果我是黑色的,我搜索白色)现在,如果我找到一个相邻的棋子,我应该继续朝那个方向看,看看我自己的棋子是否在最后,然后我返回 true,否则如果它是空的空间或棋盘边界外,我返回假。
当我打印出错误的动作时,我的功能似乎无法正常工作。
bool checkLegalInDirection(char boardgame[26][26], int size, int row, int col, char color) {
int currentRow, currentCol;
for (int deltaRow = -1; deltaRow < 2; deltaRow++) {
for (int deltaCol = -1; deltaCol < 2; deltaCol++) {
if (deltaRow == 0 && deltaCol == 0) {
break;
} else {
row = row + deltaRow;
col = col + deltaCol;
if (positionInBounds(size, row, col)) {
while (boardgame[row][col] == OppositeColor(color)) {
currentRow = row + deltaRow;
currentCol = col + deltaCol;
if (positionInBounds(size, currentRow, currentCol)) {
if (boardgame[currentRow][currentCol] == color) {
return true;
} else {
return false;
}
}
}
}
}
}
}
}
deltaRow 和 deltaCol 是在每个方向上的增量,并添加一个时间以继续在指定位置进行搜索。PositioninBounds 是一个功能,我必须确保我的搜索在棋盘边界内。我的 deltarow 和 deltacol 不能同时为 0,所以不知何故我需要跳过这一步(我可能做错了)。Oppositecolor 是一个函数,它返回我自己作品的相反颜色。