检查2D Array中相邻的对角线位置



我有一个用于在棋盘上存储棋子的2D数组设置,并且我有一些方法允许我检查所选位置的棋子是否可以跳跃。每个方法单独工作,但当我尝试将它们一起使用时-特别是检查西南方向的方法-我得到Access violation reading location错误。我还不知道如何检查我是否越界了,但我不认为这是问题所在。rowcol为阵列的heightwidth, rc为用户输入的坐标。

if (jumpPosRightToLeft(board, 'X', 'O', row, col, r,c) ||
    jumpPosRightToLeft(board, 'O', 'X', row, col, r,c)) {
    cout << "can make move";
}
if (jumpPosLeftToRight(board, 'X', 'O', row, col, r, c) ||
    jumpPosLeftToRight(board, 'X', 'O', row, col, r, c)) {
    cout << "can make move";
}

方法是这样实现的:

bool jumpPosRightToLeft(char **board, char x, char y, int row, int col) {
    if (board[row][col] == x &&
        board[row - 1][col + 1] == y &&
        board[row - 2][col + 2] == ' ') {
        return true;
    }
    return false;
 }
bool jumpPosLeftToRight(char **board, char x, char y, int row, int col) {
    if (board[row][col] == x &&
        board[row + 1][col - 1] == y &&
        board[row + 2][col - 2] == ' ') {
        return true;
    }
    return false;
}

你真是越界了。

你应该这样做:

#define BOARDSIZE 8 // Define whatever board size (square) you want here
bool jumpPosLeftToRight(char **board, char tokenA, char tokenB, int r, int c, int row, int col) {
    if (row + 1 >= BOARDSIZE || row + 2 >= BOARDSIZE || col - 1 < 0 || col - 2 < 0) return false;
    if (board[row][col] == tokenA &&
        board[row + 1][col - 1] == tokenB &&
        board[row + 2][col - 2] == ' ') {
        return true;
    }
    return false;
}

我确信你可以很容易地把它推断到你的其他函数上。当使用数组之类的东西时,您应该在尝试对它们进行操作之前始终进行边界检查。

最新更新