Подскажите, пожалуйста, почему Валёк ругается, в упор не вижу. Вроде всё работает как надо.
package com.javarush.games.minesweeper;
import com.javarush.engine.cell.*;
import java.util.*;
public class MinesweeperGame extends Game {
private static final int SIDE = 9;
private int countMinesOnField = 0;
private static final String FLAG = "\uD83D\uDEA9";
private static final String MINE = "\uD83D\uDCA3";
private int countFlags = 0;
@Override
public void initialize()
{
setScreenSize(SIDE, SIDE);
createGame();
}
private GameObject[][] gameField = new GameObject[SIDE][SIDE];
private void createGame(){ // создать игру
for(int i = 0; i < gameField.length; i++)
{
for(int j = 0; j < gameField.length; j++)
{
int posibility = getRandomNumber(10);
if(posibility == 1)
{
gameField[j][i] = new GameObject(i, j, true);
countMinesOnField ++;
countFlags = countMinesOnField;
}
else
{
gameField[j][i] = new GameObject(i, j, false);
}
setCellColor(j, i, Color.YELLOW);
}
}
countMineNeighbors();
}
private void countMineNeighbors() // Подсчёт заминированных соседей
{
for(int i = 0; i < SIDE; i++){
for(int j = 0; j < SIDE; j++){
GameObject gameObject = gameField[i][j];
if(!gameField[i][j].isMine){
for(GameObject neighbor : getNeighbors(gameObject))
if(neighbor.isMine == true){
gameObject.countMineNeighbors ++;
}
}
}
}
}
private List<GameObject> getNeighbors(GameObject gameObject) { // получить список соседей
List<GameObject> result = new ArrayList<>();
for (int y = gameObject.y - 1; y <= gameObject.y + 1; y++) {
for (int x = gameObject.x - 1; x <= gameObject.x + 1; x++) {
if (y < 0 || y >= SIDE) {
continue;
}
if (x < 0 || x >= SIDE) {
continue;
}
if (gameField[y][x] == gameObject) {
continue;
}
result.add(gameField[y][x]);
}
}
return result;
}
private void openTile(int x, int y){ // открыть ячейку
GameObject tile = gameField[y][x];
for(int i = 0; i<getNeighbors(tile).size(); i++ )
{
GameObject safeNeighbor = getNeighbors(tile).get(i);
if(tile.isMine == false && tile.countMineNeighbors == 0 && safeNeighbor.isOpen == false){
tile.isOpen = true;
openTile(safeNeighbor.x, safeNeighbor.y);
setCellColor(tile.x,tile.y, Color.RED);
}
}
setCellValue(tile.x,tile.y, "");
if(tile.isMine == true){
setCellValue(tile.x,tile.y, MINE);
tile.isOpen = true;
}
else if (tile.isMine == false && tile.countMineNeighbors != 0){
setCellNumber(tile.x,tile.y, tile.countMineNeighbors);
setCellColor(tile.x,tile.y, Color.RED);
tile.isOpen = true;
}
}
private void markTile(int x, int y){ // Пометить ячейку
GameObject tile = gameField[y][x];
if(countFlags == 0){/*Ничего не делать*/}
else{
if(tile.isFlag == false && tile.isOpen == false)
{
countFlags--;
setCellColor(tile.x,tile.y, Color.YELLOW);
setCellValue(tile.x,tile.y, FLAG);
tile.isFlag = true;
}
else if(tile.isFlag == true && tile.isOpen == false)
{
countFlags++;
setCellValue(tile.x,tile.y, " ");
setCellColor(tile.x, tile.y, Color.YELLOW);
tile.isFlag = false;
}
}
}
@Override
public void onMouseLeftClick(int x, int y){ //левый клик мыши
GameObject tile = gameField[y][x];
if(tile.isFlag == true){/*Ничего не делать*/}
else{
openTile(x, y);
}
}
@Override
public void onMouseRightClick(int x, int y){ //Правый клик мыши
GameObject tile = gameField[y][x];
markTile(x, y);
}
}