I have the failure of infinite loop. how can i stop it?
package com.codegym.games.minesweeper;
import com.codegym.engine.cell.*;
public class MinesweeperGame extends Game {
private static final int SIDE =9;
private GameObject[][]gameField = new GameObject[SIDE][SIDE];
private int countMinesOnField, countFlags;
private static final String MINE = "\uD83D\uDCA3";
private static final String FLAG = "\uD83D\uDEA9";
public void initialize(){
setScreenSize(SIDE,SIDE);
createGame();
}
private void createGame(){
for(int i=0; i<SIDE; i++){
for(int j=0;j<SIDE; j++){
int n = getRandomNumber(10);
if(n==1){
gameField[i][j]=new GameObject(j,i, true);
countMinesOnField++;
}
else{
gameField[i][j]= new GameObject(j,i, false);
}
setCellColor(i,j,Color.ORANGE);
}
}
countMineNeighbors();
countFlags = countMinesOnField;
}
@Override
public void onMouseLeftClick(int x, int y){
openTile(x,y);
}
private void countMineNeighbors(){
for(int j = 0; j < SIDE; j++){
for(int i = 0; i < SIDE; i++){
if(!gameField[i][j].isMine){
GameObject gameObject = gameField[i][j];
getNeighbors(gameObject);
}
}
}
}
private void getNeighbors(GameObject gameObject){
int count = 0;
int x = gameObject.y;
int y = gameObject.x;
if(!gameField[x][y].isMine)
{
if(x == 0 && y == 0 )
{
if(gameField[1][0].isMine) count++;
if(gameField[1][1].isMine) count++;
if(gameField[0][1].isMine) count++;
}
else if(x == 0 && y == (SIDE-1))
{
if(gameField[0][SIDE-2].isMine) count++;
if(gameField[1][SIDE-2].isMine) count++;
if(gameField[1][SIDE-1].isMine) count++;
}
else if(y == 0 && x == (SIDE-1))
{
if(gameField[SIDE-2][0].isMine) count++;
if(gameField[SIDE-2][1].isMine) count++;
if(gameField[SIDE-1][1].isMine) count++;
}
else if(x == (SIDE-1) && y == (SIDE-1))
{
if(gameField[SIDE-2][SIDE-1].isMine) count++;
if(gameField[SIDE-2][SIDE-2].isMine) count++;
if(gameField[SIDE-1][SIDE-2].isMine) count++;
}
else if(x == 0)
{
if(gameField[x][y-1].isMine) count++;
if(gameField[x][y+1].isMine) count++;
if(gameField[x+1][y-1].isMine) count++;
if(gameField[x+1][y].isMine) count++;
if(gameField[x+1][y+1].isMine) count++;
}
else if (x == (SIDE-1))
{
if(gameField[x][y-1].isMine) count++;
if(gameField[x][y+1].isMine) count++;
if(gameField[x-1][y-1].isMine) count++;
if(gameField[x-1][y].isMine) count++;
if(gameField[x-1][y+1].isMine) count++;
}
else if(y == 0)
{
if(gameField[x-1][y].isMine) count++;
if(gameField[x+1][y].isMine) count++;
if(gameField[x-1][y+1].isMine) count++;
if(gameField[x][y+1].isMine) count++;
if(gameField[x+1][y+1].isMine) count++;
}
else if(y == (SIDE-1))
{
if(gameField[x-1][y].isMine) count++;
if(gameField[x+1][y].isMine) count++;
if(gameField[x-1][y-1].isMine) count++;
if(gameField[x][y-1].isMine) count++;
if(gameField[x+1][y-1].isMine) count++;
}
else
{
if(gameField[x-1][y].isMine) count++;
if(gameField[x+1][y].isMine) count++;
if(gameField[x-1][y-1].isMine) count++;
if(gameField[x][y-1].isMine) count++;
if(gameField[x+1][y-1].isMine) count++;
if(gameField[x-1][y+1].isMine) count++;
if(gameField[x][y+1].isMine) count++;
if(gameField[x+1][y+1].isMine) count++;
}
}
gameObject.countMineNeighbors = count;
}
private void openTile(int x, int y){
gameField[x][y].isOpen = true;
setCellColor(x,y,Color.GREEN);
if(!gameField[y][x].isMine&&gameField[y][x].countMineNeighbors==0)
setCellValue(x,y,"");
else{
if(gameField[y][x].isMine)
setCellValue(x,y,MINE);
else
setCellNumber(x,y,gameField[y][x].countMineNeighbors);
}
if(!gameField[y][x].isMine&&gameField[y][x].countMineNeighbors==0){
int m=y,n=x;
if(m-1>=0&&m-1<SIDE){
if(!gameField[m-1][n].isOpen)
openTile(n,m-1);
if(n-1>=0&&!gameField[m-1][n-1].isOpen)
openTile(n-1,m-1);
if(n+1<SIDE&&!gameField[m-1][n+1].isOpen)
openTile(n+1,m-1);
}
if(m>=0&&m<SIDE){
if(n-1>=0&&!gameField[m][n-1].isOpen)
openTile(n-1,m);
if(n+1<SIDE&&!gameField[m][n+1].isOpen)
openTile(n+1,m);
}
if(m+1>=0&&m+1<SIDE){
if(!gameField[m+1][n].isOpen)
openTile(n,m+1);
if(n-1>=0&&!gameField[m+1][n-1].isOpen)
openTile(n-1,m-1);
if(n+1<SIDE&&!gameField[m+1][n+1].isOpen)
openTile(n+1,m-1);
}
}
}
}