Столкнулся с проблемой на самом начальном этапе написания игры, думал что это из-за того что у меня не куплена подписка премиум, но друг сказал что у него не было подписки и всё было хорошо. Как мне это исправить. Проверил код на бесконечные циклы их вроде нет. Код скопирую ниже, скрин прикреплю.
package com.javarush.games.minesweeper;
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
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;
private static final String Mine = "\uD83D\uDCA3";
@Override
public void initialize() {
setScreenSize(SIDE, SIDE);
createGame();
}
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
setCellNumber(x, y, gameField[y][x].countMineNeighbors);
}
private void createGame() {
for (int x = 0; x < SIDE; x++) {
for (int y = 0; y < SIDE; y++) {
boolean isMine = getRandomNumber(10) < 1;
if (isMine) {
countMinesOnField++;
}
gameField[y][x] = new GameObject(x, y, isMine);
setCellColor(x, y, Color.ORANGE);
}
}
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 countMineNeighbors() {
for (int x = 0; x < SIDE; x++){
for (int y = 0; y < SIDE; y++){
if (!gameField[y][x].isMine){
List<GameObject> listOfNeighbors = getNeighbors(gameField[y][x]);
for (GameObject gameObject: listOfNeighbors){
if (gameObject.isMine){
gameField[y][x].countMineNeighbors++;
}
}
}
}
}
}
@Override
public void onMouseLeftClick(int x, int y){
openTile(x, y);
}
}
package com.javarush.games.minesweeper;
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
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;
private static final String Mine = "\uD83D\uDCA3";
@Override
public void initialize() {
setScreenSize(SIDE, SIDE);
createGame();
}
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
setCellNumber(x, y, gameField[y][x].countMineNeighbors);
}
private void createGame() {
for (int x = 0; x < SIDE; x++) {
for (int y = 0; y < SIDE; y++) {
boolean isMine = getRandomNumber(10) < 1;
if (isMine) {
countMinesOnField++;
}
gameField[y][x] = new GameObject(x, y, isMine);
setCellColor(x, y, Color.ORANGE);
}
}
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 countMineNeighbors() {
for (int x = 0; x < SIDE; x++){
for (int y = 0; y < SIDE; y++){
if (!gameField[y][x].isMine){
List<GameObject> listOfNeighbors = getNeighbors(gameField[y][x]);
for (GameObject gameObject: listOfNeighbors){
if (gameObject.isMine){
gameField[y][x].countMineNeighbors++;
}
}
}
}
}
}
@Override
public void onMouseLeftClick(int x, int y){
openTile(x, y);
}
}