Ребят, в чем подвох? вроде все сделал правильно, когда в игре остается не открытых ячеек == количеству мин появляется надпись, что я выиграл, но проверку не проходит! Заранее спасибо
package com.javarush.games.minesweeper;
import com.javarush.engine.cell.*;
import java.util.ArrayList;
import java.util.List;
public class MinesweeperGame extends Game {
private static final int SIDE = 9;
private GameObject[][] gameField = new GameObject[SIDE][SIDE];
private int countMinesOnField;
private static final String MINE = "\uD83D\uDCA3";
private static final String FLAG = "\uD83D\uDEA9";
private int countFlags;
private boolean isGameStopped;
private int countClosedTiles = SIDE * SIDE;
public void initialize() {
setScreenSize(SIDE, SIDE);
createGame();
}
private void createGame() {
for (int x = 0; x < gameField.length; x++) {
for (int y = 0; y < gameField[x].length; y++) {
boolean mine = false;
if (getRandomNumber(10) < 1) {
mine = true;
countMinesOnField++;
}
gameField[x][y] = new GameObject(y,x, mine);
setCellColor(x, y, Color.ORANGE);
isGameStopped = false;
}
}
countMineNeighbors();
countFlags = countMinesOnField;
}
// Возвращает всех сосдених 8 квадратов
private List<GameObject> getNeighbors(GameObject object) {
List<GameObject> list = new ArrayList<GameObject>();
int x = object.x;
int y = object.y;
for (int i=y-1; i<=y+1; i++)
for (int j=x-1; j<=x+1; j++){
if ( (j!=x || i!=y)&&(j>=0 && i>=0 && j<SIDE && i<SIDE) ) {
list.add(gameField[i][j]);
}
}
return list;
}
private void countMineNeighbors() {
List<GameObject> list2 = new ArrayList<>();
for(int x = 0; x<SIDE; x++){
for(int y = 0; y<SIDE; y++){
if(!gameField[y][x].isMine) {
list2=getNeighbors(gameField[y][x]);
for (int i = 0; i<list2.size(); i++) {
if (list2.get(i).isMine)
gameField[y][x].countMineNeighbors++;
}
}
}
}
}
private void openTile(int x, int y) {
if(gameField[y][x].isOpen != true && gameField[y][x].isFlag != true && isGameStopped != true) {
if (gameField[y][x].isMine) {
setCellValue(x, y, MINE);
} else {
setCellNumber(x, y, gameField[y][x].countMineNeighbors);
gameField[y][x].isOpen = true;
setCellColor(x, y, Color.GREEN);
}
if (!gameField[y][x].isMine && gameField[y][x].countMineNeighbors == 0) {
for (GameObject gameObject : getNeighbors(gameField[y][x])){
if (!gameObject.isOpen) {
openTile(gameObject.x,gameObject.y);
}
}
getNeighbors(gameField[y][x]);
}
if (!gameField[y][x].isMine && gameField[y][x].countMineNeighbors != 0) {
setCellNumber(x, y, gameField[y][x].countMineNeighbors);
}
if (!gameField[y][x].isMine && gameField[y][x].countMineNeighbors == 0) {
setCellValue(x, y, "");
}
if (gameField[y][x].isMine) {
setCellValueEx(x, y, Color.RED, MINE);
gameOver();
}
}
if ((gameField[y][x].isFlag = true) || (gameField[y][x].isOpen = true)) {
countClosedTiles--;
}
if (countClosedTiles == countMinesOnField) {
win();
}
}
private void markTile(int x, int y) {
if ((gameField[y][x].isOpen == true) ) {
} else {
if (gameField[y][x].isFlag == false && countFlags != 0) {
gameField[y][x].isFlag = true;
countFlags--;
setCellValue(x, y, FLAG);
setCellColor(x, y, Color.YELLOW);
} else if (gameField[y][x].isFlag == true){
gameField[y][x].isFlag = false;
countFlags++;
setCellValue(x, y, "");
setCellColor(x, y, Color.ORANGE);
}
}
if (isGameStopped == true) {
}
}
private void gameOver() {
isGameStopped = true;
showMessageDialog(Color.BLUE, "Игра закончена!", Color.RED, 45);
}
private void win() {
isGameStopped = true;
showMessageDialog(Color.BLUE, "Вы выиграли!", Color.GREEN, 45);
}
public void onMouseLeftClick(int x, int y) {
openTile(x, y);
}
public void onMouseRightClick(int x, int y) {
markTile(x, y);
}
}