Всем привет.Написал "Сапер"а ,все проверки прошел.При попытке запуска готовой игры - при клике выскакивает окно победы.Помогите-сам уже не вижу своей ошибки (((
package com.javarush.games.minesweeper;
import com.javarush.engine.cell.*;
import java.util.ArrayList;
public class MinesweeperGame extends Game {
private static final int SIDE = 9;
private static final String MINE = "\uD83D\uDCA3";
private static final String FLAG = "\uD83D\uDEA9";
private int countMinesOnField = 0;
private int countFlags = 0;
private int countClosedTiles = SIDE*SIDE;
private int score = 0;
private boolean isGameStopped;
private GameObject gameField[][] = new GameObject[SIDE][SIDE];
@Override
public void initialize(){
setScreenSize(SIDE, SIDE);
createGame();
}
@Override
public void onMouseLeftClick(int x, int y) {
if (!isGameStopped){
super.onMouseLeftClick(x,y);
openTile(x, y);}
else
restart();
}
@Override
public void onMouseRightClick(int x, int y){
markTile(x, y);
}
private void createGame(){
int number = getRandomNumber(10);
boolean mine = false;
countFlags = countMinesOnField;
for (int x=0;x<gameField.length;x++){
for (int y=0;y<gameField.length;y++){
if (number==0){
mine = true;
countMinesOnField++;}
gameField[y][x] = new GameObject(x,y,mine);
setCellColor(x, y, Color.GREEN);
setCellValue(x,y,"");
}
}
countMineNeighbors();
}
private void countMineNeighbors(){
ArrayList<GameObject> list = new ArrayList<>();
for (int x=0;x<gameField.length;x++)
for (int y=0;y<gameField.length;y++) {
if (!gameField[y][x].isMine) {
list = getNeighbors(gameField[y][x]);
for (GameObject cell : list) {
if (cell.isMine) {
gameField[y][x].countMineNeighbors++;
}
}
}
}
}
private ArrayList<GameObject> getNeighbors(GameObject gameObject) {
ArrayList<GameObject> neighbors = new ArrayList<GameObject>();
for (int i = gameObject.x - 1; i <= gameObject.x + 1; i++) {
if (i < 0 || i >= SIDE) continue;
for (int j = gameObject.y -1; j <= gameObject.y + 1; j++) {
if (j < 0 || j >= SIDE) continue;
if (i == gameObject.x && j == gameObject.y) continue;
neighbors.add(gameField[j][i]);
}
}
return neighbors;
}
private void openTile (int x, int y){
if (!isGameStopped&&!gameField[y][x].isFlag&&!gameField[y][x].isOpen){
gameField[y][x].isOpen=true;
countClosedTiles--;
setCellColor(x, y, Color.RED);
if (gameField[y][x].isMine){
setCellValueEx(x, y,Color.RED, MINE);
gameOver();}
else {
if (gameField[y][x].countMineNeighbors==0){
setCellValue(x,y,"");
for (GameObject gameObject:getNeighbors(gameField[y][x])) {
if (!gameObject.isOpen) {
openTile(gameObject.x, gameObject.y);
}
}
}
else setCellNumber(x,y,gameField[y][x].countMineNeighbors);
score+=5;
setScore(score);
if (countClosedTiles==countMinesOnField)
win();
}
}
}
private void markTile(int x, int y){
if (gameField[y][x].isOpen&&!isGameStopped)
return;
if (countFlags==0&&!gameField[y][x].isFlag&&!isGameStopped)
return;
if (!gameField[y][x].isFlag&&!isGameStopped){
gameField[y][x].isFlag=true;
countFlags--;
setCellValue(x,y,FLAG);
setCellColor(x,y,Color.AQUA);
}
else if (gameField[y][x].isFlag&&!isGameStopped){
gameField[y][x].isFlag=false;
countFlags++;
setCellValue(x,y,"");
setCellColor(x,y,Color.GREEN);
}
}
private void gameOver(){
isGameStopped = true;
showMessageDialog(Color.AQUAMARINE, "Игра окончена!", Color.HOTPINK, 24);
}
private void win(){
isGameStopped = true;
showMessageDialog(Color.AQUAMARINE, "Победа!!!", Color.HOTPINK, 24);
}
private void restart(){
isGameStopped = false;
countClosedTiles = SIDE*SIDE;
score = 0;
countMinesOnField = 0;
setScore(score);
createGame();
}
}
package com.javarush.games.minesweeper;
public class GameObject {
public int x;
public int y;
public boolean isMine;
public boolean isOpen;
public boolean isFlag;
public int countMineNeighbors;
public GameObject(int x,int y, boolean isMine){
this.x=x;
this.y=y;
this.isMine = isMine;
}
}