вроде все нормально, но как-то нет
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=0;
private static final String MINE = "\uD83D\uDCA3";
private static final String FLAG = "\uD83D\uDEA9";
private int countFlags;
public void initialize(){
setScreenSize(SIDE,SIDE);
createGame();
}
private void createGame(){
for(int x=0; x<SIDE; x++){
for(int y=0; y<SIDE; y++){
if(getRandomNumber(10)==0){
gameField[y][x] = new GameObject(x,y, true);
countMinesOnField++;
}else{
gameField[y][x] = new GameObject(x,y, false);
}
setCellColor(x, y, Color.ORANGE);
}
}
countFlags = countMinesOnField;
countMineNeighbors();
}
private List<GameObject> getNeighbors (GameObject gameObject) {
List<GameObject> getNeighbours = new ArrayList<>();
int i = gameObject.x;
int j = gameObject.y;
if (j-1 >= 0 && i-1 >= 0) getNeighbours.add(gameField[j-1][i-1]);
if (i-1 >= 0) getNeighbours.add(gameField[j][i-1]);
if (i-1 >= 0 && j+1 < SIDE) getNeighbours.add(gameField[j+1][i-1]);
if (j-1 >= 0) getNeighbours.add(gameField[j-1][i]);
if (j+1 < SIDE) getNeighbours.add(gameField[j+1][i]);
if (j-1 >= 0 && i+1 < SIDE) getNeighbours.add(gameField[j-1][i+1]);
if (i+1 < SIDE) getNeighbours.add(gameField[j][i+1]);
if (j+1 < SIDE && i+1 < SIDE) getNeighbours.add(gameField[j+1][i+1]);
return getNeighbours;
}
private void countMineNeighbors() {
for (int i = 0; i < SIDE; i++) {
for (int j = 0; j < SIDE; j++) {
if (!gameField[j][i].isMine) {
for (int k = 0; k < getNeighbors(gameField[j][i]).size(); k++) {
if (getNeighbors(gameField[j][i]).get(k).isMine) {
gameField[j][i].countMineNeighbors++;
}
}
}
}
}
}
private void openTile(int x, int y){
gameField[y][x].isOpen=true;
setCellColor(x,y, Color.GREEN);
if(gameField[y][x].isMine){
setCellValue(x,y,MINE);
}
else {
boolean notZero = gameField[y][x].countMineNeighbors!=0;
if(notZero){
setCellNumber(x,y,gameField[y][x].countMineNeighbors);
}
else {
setCellValue(x,y,"");
List<GameObject> list3 = new ArrayList<>();
list3=getNeighbors(gameField[y][x]);
for(int i=0; i<list3.size();i++){
int Xx=list3.get(i).x;
int Yy=list3.get(i).y;
if(!list3.get(i).isOpen){
openTile(Xx,Yy);
}
}
}
}
}
public void onMouseLeftClick(int x, int y){
openTile(x,y);
}
public void onMouseRightClick(int x, int y){
markTile(x,y);
}
private void markTile(int x, int y){
if (!gameField[y][x].isOpen){
if (!gameField[y][x].isFlag && countFlags > 0){
gameField[y][x].isFlag = true;
countFlags--;
setCellValue(x, y, FLAG);
setCellColor(x,y,Color.YELLOW);
}
if (gameField[y][x].isFlag == true){
gameField[y][x].isFlag = false;
countFlags++;
setCellValue(x, y, "");
setCellColor(x, y, Color.ORANGE);
}}
}
}