private void openTile(int x, int y) {
if (!gameField[y][x].isMine) {
if (gameField[y][x].countMineNeighbors == 0){
if (gameField[y][x].isOpen == false){
setCellValue(x, y, "");
setCellColor(x, y, Color.GREEN);
gameField[y][x].isOpen = true;
List<GameObject> neighborns = getNeighbors(gameField[y][x]);
for (int i = 0; i < neighborns.size(); i++) {
openTile(neighborns.get(i).x, neighborns.get(i).y);
}
}
}
if (gameField[y][x].countMineNeighbors!=0) {
setCellNumber(x, y, gameField[y][x].countMineNeighbors);
setCellColor(x, y, Color.GREEN);
gameField[y][x].isOpen = true;
}
}
if (gameField[y][x].isMine){
setCellValue(x, y, MINE);
setCellColor(x, y, Color.RED);}
}
Ivan Gantimurov
23 уровень
Объясните кто нибудь, по факту какую роль играет переменная isOpen, ибо при запуске игры с этой переменной и без неё, разницы при игре не нашёл, а валидатор виснет без isOpen?
Решен
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
YuriyExpert
25 сентября 2019, 11:55решение
Этот флаг нужен для выхода из рекурсивного обхода соседних клеток для случая когда открывается пустая ячейка (у которой нет соседей с минами). У Вас этой проверки нет, поэтому когда открываете пустую ячейку игра будет зависать - openTile бесконечно вызывает сам себя.
Если countMineNeighbors в открываемой ячейки равен 0, то для этой ячейки надо установить isOpen = true и вызвать openTile для каждого из ее соседей с isOpen = false.
+2