Алгоритм неправильно убивает Go фигур, когда воздух направо внизу - PullRequest
0 голосов
/ 21 марта 2020

Я создал алгоритм, чтобы определить, какие фигуры были убиты в игре Go. Для моего алгоритма фигуры хранятся в двумерном массиве строк и столбцов (от 0 - 8, так как я использую доску 9x9). Каждая часть также является массивом, где:

  • piece[0] - это цвет части, либо "empty", "black", либо "white".
  • piece[1] не имеет значения.
  • piece[2] является логическим значением того, имеет ли он свободу (изначально установлен на true, если пустой квадрат, и false, если там есть кусок).
  • piece[3] - это было ли оно итерировано в алгоритме или нет. Все фигуры начинаются с этого как true.

Вот алгоритм для определения того, какие фигуры имеют свободу:

let oldBoard = 0;
while (board != oldBoard) {
    oldBoard = board;
    for (let row = 0; row < 9; row++) {
        for (let col = 0; col < 9; col++) {
            if (board[row][col][2] && !board[row][col][3]) {
                board[row][col][3] = true;
                if (row != 0 && (board[row][col][0] == "empty" || board[row][col][0] == board[row-1][col][0])) { board[row-1][col][2] = true; }
                if (row != 8 && (board[row][col][0] == "empty" || board[row][col][0] == board[row+1][col][0])) { board[row+1][col][2] = true; }
                if (col != 0 && (board[row][col][0] == "empty" || board[row][col][0] == board[row][col-1][0])) { board[row][col-1][2] = true; }
                if (col != 8 && (board[row][col][0] == "empty" || board[row][col][0] == board[row][col+1][0])) { board[row][col+1][2] = true; }
            }
        }
    }
}

После этого удаляются все фигуры, помеченные как не Имея свободу (piece[2] == false).

Все работает нормально, если только воздушные пространства не находятся внизу / справа. Например, если вы запишете эту конфигурацию:

enter image description here

Тогда часть X-ed будет захвачена, чего не должно быть. Но, если вы отложите эту конфигурацию:

enter image description here

, тогда ни один фрагмент не будет захвачен, что является ожидаемым результатом.

As Насколько я могу судить по моим исследованиям ошибки, кажется, что любая фигура, отмеченная как имеющая свободу от фигуры к ее нижней или правой части, не может дать свободу смежным фигурам.

Вы можете найти полное хранилище здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...