簡體   English   中英

檢查2D陣列中的相鄰對角線位置

[英]Checking neighboring diagonal positions in 2D Array

我有一個2D陣列設置,用於將棋子存儲在棋盤中,並且我創建了一些方法,這些方法可以讓我檢查選定位置的棋子是否可以跳躍。 每種方法都可以單獨使用,但是當我嘗試一起使用它們時(特別是檢查西南方向的方法),我遇到Access violation reading location錯誤。 我還沒有弄清楚如何檢查自己是否超出范圍,但是我認為這不是問題所在。 rowcol是數組的heightwidthrc是用戶輸入的坐標。

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;
}

我敢肯定,您可以輕松地將其外推到其他功能。 使用數組之類的東西時,應始終在進行操作之前進行邊界檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM