Не проходит 6 пункт. Программа работает, в чем проблема ?
package com.javarush.games.minesweeper;
import com.javarush.engine.cell.*;
import java.util.ArrayList; //чтобы использовать список
/*
Для указания размерности в движке существует метод setScreenSize(int, int),
который принимает параметрами ширину и высоту (количество ячеек по ширине и высоте).
setCellColor(int, int, Color) класса Game, параметры которого — координаты и цвет ячейки.
getRandomNumber(int n) класса Game, который возвращает случайное число от 0 до n-1 включительно.
onMouseLeftClick(int, int) при клике по ней левой кнопкой мыши. Для обработки такого нажатия существует специальный метод движка
void setCellValue(int x, int y, String value) — помещает в клетку с координатами (x, y) текст value:
void setCellNumber(int x, int y, int value) — помещает в клетку с координатами (x, y) число value:
Для вывода сообщения игроку в движке предусмотрен метод showMessageDialog().
showMessageDialog(Color, String, Color, int). специальный метод, который выводит диалоговое окно на игровой экран:
цвет фона диалогового окна;
message — текст сообщения;
textColor — цвет текста сообщения;
textSize — размер текста сообщения.
void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor, int textSize);
устанавливает клетке с координатами (x, y) цвет фона cellColor, контент value, цвет контента textColor и размер контента textSize:
*/
public class MinesweeperGame extends Game { //extends наследование от класса Game класса движка
private static final int SIDE = 9; //можно обращаться только из того же класса, где он объявлен. Модификатора static - с англ. "статичный", "постоянный" - делает переменную или метод "независимыми" от объекта.
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 ; //количество неиспользоваемых флагов
private boolean isGameStopped; //остановка игры
public void initialize() // можно обращаться из любого места программы. Это самая высокая степень открытости — никаких ограничений нет.
{
setScreenSize(SIDE,SIDE); //рисуем сетку
createGame(); // создаем объекты, окрашиваем ячейки
}
private void createGame()
{
isGameStopped = false;
for(int i=0; i<gameField.length; i++) // создаем объекты каждой ячейки и окрашиваем их
{
for(int j=0; j<gameField[i].length;j++)
{
int rand;
rand = getRandomNumber(10);
if (rand==5)
{
gameField[j][i] = new GameObject(i,j,true); // создание объектов для каждой ячейки
countMinesOnField++;
countFlags=countMinesOnField; //количество флагов равно количеству мин
}
else gameField[j][i] = new GameObject(i,j,false);
setCellColor(i,j,Color.ORANGE); //присваивание цвета
}
}
countMineNeighbors(); // подсчитываем количество соседних ячеек мин
}
private void countMineNeighbors()//подсчитывает количество соседних ячеек мин
{
ArrayList<GameObject> list = new ArrayList<>();
for(int i=0;i<SIDE;i++)
{
for(int j=0;j<SIDE;j++)
{
if (!gameField[j][i].isMine)
{
list=getNeighbors(gameField[j][i]);
int numberlist = list.size(); // получаем количество элементов в списке
for(int q = 0; q<numberlist; q++)
{
if (list.get(q).isMine) //.get возвращает по индексу
{
gameField[j][i].countMineNeighbors++; //присваем количество мин по соседству
}
}
}
}
}
}
private ArrayList<GameObject> getNeighbors(GameObject gameObject) //возвращает список всех соседних ячеек
{
ArrayList<GameObject> list = new ArrayList<>();
if (gameObject.x - 1 >= 0) list.add(gameField[gameObject.y][gameObject.x-1]);
if (gameObject.y - 1 >= 0) list.add(gameField[gameObject.y-1][gameObject.x]);
if (gameObject.x + 1 < SIDE) list.add(gameField[gameObject.y][gameObject.x+1]);
if (gameObject.y + 1 < SIDE) list.add(gameField[gameObject.y+1][gameObject.x]);
if (gameObject.x - 1 >= 0 && gameObject.y - 1 >= 0) list.add(gameField[gameObject.y-1][gameObject.x-1]);
if (gameObject.y - 1 >= 0 && gameObject.x + 1 < SIDE) list.add(gameField[gameObject.y-1][gameObject.x+1]);
if (gameObject.x + 1 < SIDE && gameObject.y + 1 < SIDE) list.add(gameField[gameObject.y+1][gameObject.x+1]);
if (gameObject.y + 1 < SIDE && gameObject.x - 1 >= 0) list.add(gameField[gameObject.y+1][gameObject.x-1]);
return list;
}
private void openTile(int i, int j)
{
ArrayList<GameObject> listTile = new ArrayList<>();
listTile=getNeighbors(gameField[j][i]);
if(gameField[j][i].isMine)
{
setCellValue(i,j,MINE);
setCellValueEx( i,j,Color.RED, MINE); //метод движка
gameOver(); return; //метод
}
if (!gameField[j][i].isMine&&gameField[j][i].countMineNeighbors!=0)
{
setCellNumber(i,j,gameField[j][i].countMineNeighbors);
}
if (!gameField[j][i].isMine&&gameField[j][i].countMineNeighbors==0)
{
setCellValue(i,j,"");
}
gameField[j][i].isOpen=true; //указывается что ячейка открыта
setCellColor(i,j,Color.GREEN);
if (!gameField[j][i].isMine&&gameField[j][i].countMineNeighbors==0)// открывает все ячейки не мины
{
for(int q=0; q<listTile.size();q++)
{
int Xx = listTile.get(q).x;
int Yy = listTile.get(q).y;
if(!listTile.get(q).isOpen) openTile(Xx,Yy);
}
}
// gameField[j][i].isOpen=true; //указывается что ячейка открыта
//setCellColor(i,j,Color.GREEN); //закрашиваем открытую ячейку
}
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 (isGameStopped=true)
{
return;
}
if(gameField[y][x].isOpen)
{
return;
}
if (countFlags==0&&gameField[y][x].isFlag==false)
{
return;
}
if (!gameField[y][x].isFlag)
{
gameField[y][x].isFlag=true;
countFlags--;
setCellValue(x,y,FLAG);
setCellColor(x,y,Color.YELLOW);
}
else if(gameField[y][x].isFlag)
{
gameField[y][x].isFlag=false;
countFlags+=1;
setCellValue(x,y,"");
setCellColor(x,y,Color.ORANGE);
}
}
private void gameOver ()
{
isGameStopped=true;
showMessageDialog(Color.RED," НЕ ФОРТАНУЛО ", Color.BLUE,32);
}
}