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