Здравствуйте.
При попытке опубликовать с сайта игру Сапер выдает ошибку APP_PUBLISH_ERROR. Скрин с ошибкой - https://ibb.co/CvDvJrg.
Также пробовал через IJ IDEA, тоже не публикует. Скрин - https://ibb.co/yNfjWrm.
При попытке запустить игру с сайта также выдает ошибку APP_PUBLISH_ERROR. Скрин - https://ibb.co/jVZQ14K. При этом в IJ IDEA игра запускается.
Просьба помочь.
Заранее спасибо.
package com.javarush.games.minesweeper;
public class GameObject {
public int x;
public int y;
public boolean isMine;
public int countMineNeighbors;
public boolean isOpen;
public boolean isFlag;
public GameObject(int x, int y, boolean isMine) {
this.x = x;
this.y = y;
this.isMine = isMine;
}
@Override
public String toString() {
return "GameObject{" +
"x=" + x +
", y=" + y +
", isMine=" + isMine +
", countMineNeighbors=" + countMineNeighbors +
'}';
}
}
package com.javarush.games.minesweeper;
import com.javarush.engine.cell.*;
import java.util.ArrayList;
import java.util.List;
public class MinesweeperGame extends Game {
private final static int SIDE = 9;
private GameObject[][] gameField = new GameObject[SIDE][SIDE];
private int countMinesOnField;
private static final String MINE = "\uF09F\u92A3";
private static final String FLAG = "\uD83D\uDEA9";
private int countFlags;
private boolean isGameStopped;
private int countClosedTiles = SIDE * SIDE;
private int score;
@Override
public void initialize() {
setScreenSize(SIDE, SIDE);
createGame();
}
private void createGame() {
int countOfMines = SIDE * SIDE / 10;
for (int x = 0; x < SIDE; x++) {
for (int y = 0; y < SIDE; y++) {
boolean rnd = false;
/*if (getRandomNumber(10) == 0) {
rnd = true;
countMinesOnField++;
}*/
gameField[y][x] = new GameObject(x, y, rnd);
setCellColor(x, y, Color.ORANGE);
setCellValue(x, y, "");
}
}
while (countOfMines > countMinesOnField) {
int x = getRandomNumber(9);
int y = getRandomNumber(9);
if (!gameField[y][x].isMine) {
gameField[y][x].isMine = true;
countMinesOnField++;
}
}
countMineNeighbors();
countFlags = countMinesOnField;
}
private void countMineNeighbors() {
for (int x = 0; x < SIDE; x++) {
for (int y = 0; y < SIDE; y++) {
if (gameField[y][x].isMine == false) {
int count = 0;
List<GameObject> neighbors = getNeighbors(gameField[y][x]);
for (GameObject neighbor : neighbors) {
if (neighbor.isMine) {
count++;
}
}
gameField[y][x].countMineNeighbors = count;
}
}
}
}
private List<GameObject> getNeighbors(GameObject gm) {
int count = 0;
int x = gm.x;
int y = gm.y;
List<GameObject> neighbors = new ArrayList<>();
if (x != 0 && y != 0 && x != SIDE - 1 && y != SIDE - 1) {
neighbors.add(gameField[y][x - 1]);
neighbors.add(gameField[y][x + 1]);
neighbors.add(gameField[y + 1][x]);
neighbors.add(gameField[y + 1][x - 1]);
neighbors.add(gameField[y + 1][x + 1]);
neighbors.add(gameField[y - 1][x]);
neighbors.add(gameField[y - 1][x - 1]);
neighbors.add(gameField[y - 1][x + 1]);
}
if (x != 0 && y == 0 && x != SIDE - 1) {
neighbors.add(gameField[y][x - 1]);
neighbors.add(gameField[y][x + 1]);
neighbors.add(gameField[y + 1][x]);
neighbors.add(gameField[y + 1][x - 1]);
neighbors.add(gameField[y + 1][x + 1]);
}
if (x == 0 && y != 0 && y != SIDE - 1) {
neighbors.add(gameField[y + 1][x]);
neighbors.add(gameField[y - 1][x]);
neighbors.add(gameField[y][x + 1]);
neighbors.add(gameField[y - 1][x + 1]);
neighbors.add(gameField[y + 1][x + 1]);
}
if (x != 0 && y == SIDE - 1 && x != SIDE - 1) {
neighbors.add(gameField[y][x - 1]);
neighbors.add(gameField[y][x + 1]);
neighbors.add(gameField[y - 1][x]);
neighbors.add(gameField[y - 1][x - 1]);
neighbors.add(gameField[y - 1][x + 1]);
}
if (x == SIDE - 1 && y != 0 && y != SIDE - 1) {
neighbors.add(gameField[y + 1][x]);
neighbors.add(gameField[y - 1][x]);
neighbors.add(gameField[y][x - 1]);
neighbors.add(gameField[y - 1][x - 1]);
neighbors.add(gameField[y + 1][x - 1]);
}
if (x == 0 && y == 0) {
neighbors.add(gameField[y + 1][x]);
neighbors.add(gameField[y + 1][x + 1]);
neighbors.add(gameField[y][x + 1]);
}
if (x == SIDE - 1 && y == SIDE - 1) {
neighbors.add(gameField[y - 1][x]);
neighbors.add(gameField[y - 1][x - 1]);
neighbors.add(gameField[y][x - 1]);
}
if (x == 8 && y == 0) {
neighbors.add(gameField[y + 1][x]);
neighbors.add(gameField[y + 1][x - 1]);
neighbors.add(gameField[y][x - 1]);
}
if (x == 0 && y == 8) {
neighbors.add(gameField[y - 1][x]);
neighbors.add(gameField[y - 1][x + 1]);
neighbors.add(gameField[y][x + 1]);
}
return neighbors;
}
@Override
public void onMouseLeftClick(int x, int y) {
if (isGameStopped) {
restart();
return;
}
if (x >= SIDE || y >= SIDE || x < 0 || y < 0) {
return;
}
openTile(x, y);
}
private void openTile(int x, int y) {
if (isGameStopped) {
return;
}
GameObject gameObject = gameField[y][x];
if (gameObject.isOpen) {
return;
}
if (gameObject.isFlag) {
return;
}
if (gameObject.isMine) {
setCellValueEx(x, y, Color.RED, MINE);
gameOver();
}
if (!gameObject.isMine) {
gameField[y][x].isOpen = true;
countClosedTiles--;
score = score + 5;
if (gameObject.countMineNeighbors == 0) {
List<GameObject> neighbors = getNeighbors(gameObject);
for (GameObject neighbor : neighbors) {
if (!neighbor.isOpen) {
openTile(neighbor.x, neighbor.y);
}
}
setCellColor(x, y, Color.GREEN);
setCellValue(x, y, "");
}
if (gameObject.countMineNeighbors != 0) {
setCellNumber(x, y, gameObject.countMineNeighbors);
setCellColor(x, y, Color.GREEN);
}
}
setScore(score);
if (countMinesOnField == countClosedTiles) {
win();
return;
}
}
@Override
public void onMouseRightClick(int x, int y) {
if (isGameStopped){
System.exit(0);
}
if (x >= SIDE || y >= SIDE || x < 0 || y < 0) {
System.exit(0);
}
markTile(x, y);
}
private void markTile(int x, int y) {
if (isGameStopped) {
return;
}
GameObject gameObject = gameField[y][x];
if (gameObject.isOpen) {
return;
}
if (countFlags == 0 && !gameObject.isFlag) {
return;
}
if (!gameObject.isFlag) {
gameObject.isFlag = true;
countFlags--;
setCellValue(x, y, FLAG);
setCellColor(x, y, Color.YELLOW);
return;
}
if (gameObject.isFlag) {
gameObject.isFlag = false;
countFlags++;
setCellValue(x, y, "");
setCellColor(x, y, Color.ORANGE);
}
}
private void gameOver() {
isGameStopped = true;
showMessageDialog(Color.BLACK, "GAME OVER. Your scores: " + score, Color.RED, 36);
}
private void win() {
isGameStopped = true;
showMessageDialog(Color.BLACK, "You Won. Your scores: " + score, Color.GREEN, 36);
}
private void restart() {
isGameStopped = false;
countClosedTiles = SIDE * SIDE;
countMinesOnField = 0;
score = 0;
setScore(score);
createGame();
}
}