Подключите четыре 2d массива - PullRequest
0 голосов
/ 29 февраля 2020

Я работаю над игрой Connect 4, и есть редкие тестовые случаи, в которых программа терпит неудачу, например, здесь

x x x x x x x
x x x x x x x
R x x x x x x 
B R x x x x x 
R R R x x x B
B B B x x x B

X в моей программе означает, что это поле все еще пустое, в этом случае предполагается что никто еще не победил! но вывод "B WINS!" !!

Я попытался выяснить, в какой строке ошибка, и я обнаружил, что:

// Loop to go through the 2D and determine the winner
        for (int i = 0; i < 6; i++)
        {
            for (int j = 0; j < 7; j++)
            {
                // First Player

                // By Row
                // [ALERT] THE PROBLEM IS IN THE WIN BY ROW HERE
                if (arr[i][j] == 'B' && arr[i][j + 1] == 'B' && arr[i][j + 2] == 'B' && arr[i][j + 3] == 'B')
                    return 'B';
                // By Columns
                if (arr[i][j] == 'B' && arr[i + 1][j] == 'B' && arr[i + 2][j] == 'B' && arr[i + 3][j] == 'B')
                    return 'B';

                // Second Player
                // By Rows
                // [ALERT] THE PROBLEM IS IN THE WIN BY ROW HERE
                if (arr[i][j] == 'R' && arr[i][j + 1] == 'R' && arr[i][j + 2] == 'R' && arr[i][j + 3] == 'R')
                    return 'R';
                // By Columns
                if (arr[i][j] == 'R' && arr[i + 1][j] == 'R' && arr[i + 2][j] == 'R' && arr[i + 3][j] == 'R')
                    return 'R';
            }
        }

в чем здесь проблема? я буду очень благодарен за тебя.

1 Ответ

0 голосов
/ 29 февраля 2020

Предполагается установить ограничение в условии, например, j + 3 <= array_size </p>

// Loop to go through the 2D and determine the winner
        for (int i = 0; i < 7; i++)
        {
            for (int j = 0; j < 7; j++)
            {
                // First Player

                // By Row
                if (arr[i][j] == 'B' && arr[i][j + 1] == 'B' && arr[i][j + 2] == 'B' && arr[i][j + 3] == 'B' && j + 3 < 7)
                    return 'B';
                // By Columns
                if (arr[i][j] == 'B' && arr[i + 1][j] == 'B' && arr[i + 2][j] == 'B' && arr[i + 3][j] == 'B' && i + 3 < 7)
                    return 'B';

                // Second Player
                // By Rows
                if (arr[i][j] == 'R' && arr[i][j + 1] == 'R' && arr[i][j + 2] == 'R' && arr[i][j + 3] == 'R' && j + 3 < 7)
                    return 'R';
                // By Columns
                if (arr[i][j] == 'R' && arr[i + 1][j] == 'R' && arr[i + 2][j] == 'R' && arr[i + 3][j] == 'R' && i + 3 < 7)
                    return 'R';
            }
        }
...