Кучу вариантов написания OpenTile() перепробовала, фейлятся вторая и последняя проверки валидатора. Тестирую, вроде как корректно все работает.
Вот один из вариантов. Что не так?
private void openTile(int x, int y) {
if (isGameStopped || gameField[y][x].isOpen || gameField[y][x].isFlag) return;
gameField[y][x].isOpen = true;
countClosedTiles--;
if (gameField[y][x].isMine) {
setCellValueEx(x, y, Color.LIGHTCORAL, MINE);
gameOver();
return;
}
setCellColor(x, y, Color.LIGHTSEAGREEN);
if (countClosedTiles == countMinesOnField) {
win();
return;
}
if (gameField[y][x].countMineNeighbors == 0) {
GameObject[] neigh = getNeighbors(gameField[y][x]);
for (int i = 0; i < neigh.length; i++ ) {
if (neigh[i] == null) continue;
openTile(neigh[i].x, neigh[i].y);
}
setCellValue(x, y, "");
}
else {
setCellNumber(x,y,gameField[y][x].countMineNeighbors);
}
}package com.javarush.games.minesweeper;
public class GameObject {
public int x;
public int y;
public boolean isMine;
public int countMineNeighbors;
public boolean isOpen;
public boolean isFlag;
public GameObject(int x, int y, boolean isMine) {
this.x = x;
this.y = y;
this.isMine = isMine;
}
}