Метод onMouseLeftClick(int, int) должен вызывать метод restart() и ничего не делать, если игра остановлена.
может быть я слишком буквально понимаю валидатор???
public void onMouseLeftClick(int x, int y){
openTile(x,y);
if(!isGameStopped){
restart();
}
else {
}
}
и еще почему-то игру перестал запускать после проверки(
package com.javarush.games.minesweeper;
import com.javarush.engine.cell.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MinesweeperGame extends Game{
private static final int SIDE = 9;
private int countMinesOnField;
private static final String MINE="\uD83D\uDCA3";
private static final String FLAG="\uD83D\uDEA9";
private int countFlags;
private int countClosedTiles=SIDE*SIDE;
private boolean isGameStopped;
private int score;
private GameObject [] [] gameField = new GameObject [SIDE] [SIDE];
private void restart(){
isGameStopped=false;
countClosedTiles=SIDE*SIDE;
score=0;
countMinesOnField=0;
setScore(score);
createGame();
}
private void gameOver(){
isGameStopped=true;
showMessageDialog(Color.WHITE,"Busted",Color.RED,60);
}
private void win(){
isGameStopped=true;
showMessageDialog(Color.WHITE, "Перед нами первый победитель", Color.GREEN, 30);
}
private void markTile(int x,int y){
if(!isGameStopped){
if(!gameField[y][x].isOpen&&countFlags!=0&&!gameField[y][x].isFlag){
gameField[y][x].isFlag=true;
setCellValue(x,y,FLAG);
setCellColor(x,y,Color.YELLOW);
countFlags--;
}
else {
if(gameField[y][x].isFlag){
gameField[y][x].isFlag=false;
setCellValue(x,y,"");
setCellColor(x,y,Color.ORANGE);
countFlags++;
}
}
}
}
private void openTile(int x, int y){
if(!gameField[y][x].isOpen&&!gameField[y][x].isFlag&&!isGameStopped){
countClosedTiles--;
gameField[y][x].isOpen=true;
setCellColor(x,y, Color.GREEN);
if(gameField[y][x].isMine){
setCellValueEx(x,y,Color.RED,MINE);
gameOver();
}
else {
score=score+5;
if(countClosedTiles==countMinesOnField){
win();
}
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);
}
}
}
}
}
setScore(score);
}
private List<GameObject> getNeighbors(GameObject gameobject) {
List<GameObject> list = new ArrayList<GameObject>();
int x=gameobject.x;
int y=gameobject.y;
for (int i=y-1; i<=y+1; i++){
for (int j=x-1; j<=x+1;j++){
if(( j!=x || i!=y )&&( i>=0 && j>=0 && i<SIDE && j<SIDE)){
list.add(gameField[i][j]);
}
}
}
return list;
}
private void countMineNeighbors(){
List<GameObject> list2 = new ArrayList<>();
for (int y=0; y<SIDE; y++){
for (int x=0; x<SIDE; x++){
if(!gameField[y][x].isMine){
list2=getNeighbors(gameField[y][x]);
for (int i=0; i<list2.size();i++){
if(list2.get(i).isMine){
gameField[y][x].countMineNeighbors++;
}
}
}
}
}
}
private void createGame(){
//isGameStopped=false;
int count=0;
for (int i=0;i<SIDE;i++){
for (int j=0;j<SIDE;j++){
int x=4;
boolean ismine=x==getRandomNumber(15);
if(ismine){
gameField [j][i] = new GameObject(i,j,true);
setCellColor(j,i,Color.ORANGE);
setCellValue(j,i,"");
count++;
}
else {
gameField [j][i] = new GameObject(i,j,false);
setCellColor(j,i,Color.ORANGE);
setCellValue(j,i,"");
}
}
}
countMinesOnField=count;
countMineNeighbors();
countFlags=countMinesOnField;
}
@Override
public void initialize(){
setScreenSize(SIDE,SIDE);
createGame();
}
public void onMouseLeftClick(int x, int y){
openTile(x,y);
if(isGameStopped){
restart();
}
else {
}
}
public void onMouseRightClick(int x, int y){
markTile(x,y);
}
}