Все что требуется создано, но он говорит что не создано и не вызвано.
Что тогда не так
package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
public class Game2048 extends Game {
private static final int SIDE = 4;
private int[][] gameField = new int[SIDE][SIDE];
private boolean isGameStopped = false;
@Override
public void initialize() {
setScreenSize(SIDE,SIDE); // Создаем размер окна
createGame(); // Заполняем матрицу
drawScene(); // Раскраска зоны.
}
private void createGame() {
createNewNumber();
createNewNumber(); // Создаем 2 случайных числа в матрице
}
private void drawScene() {
for (int i = 0; i < gameField.length; i++) {
for (int j = 0; j < gameField[i].length; j++) {
setCellColoredNumber(j,i,gameField[i][j]); // Раскрашиваем зону игры
}
}
}
private void createNewNumber() {// Создаем случайное число в матрице.
int win = getMaxTileValue();
if (win == 2048) { // WIN = 2048???
win(); // Направляем в метод WIN что означает что игрок победил.
}
while (true) {
int x = getRandomNumber(SIDE);
int y = getRandomNumber(SIDE);
if (gameField[y][x] == 0) {
if (getRandomNumber(10) == 9) {
gameField[y][x] = 4;
} else {
gameField[y][x] = 2;
}
break;
}
}
}
private int getMaxTileValue() { // Есть ли в матрице 2048???
for (int i = 0; i < gameField.length; i++) {
for (int j = 0; i < gameField[i].length; j++) {
if (gameField[i][j] == 2048) {
return gameField[i][j];
}
}
}
return 0;
}
private void win() {
showMessageDialog(Color.LIGHTCYAN,"YOU WIN!!!",Color.CORAL,2048); // WIN = 2048 ВЫВОДИМ ЧТО ИГРОК ПОБЕДИЛ!
isGameStopped = true;
}
private void setCellColoredNumber(int y, int x, int value) { // ПОКРАСКА ПЛИТОК (0 не отображаеться)
if (value != 0) {
setCellValueEx(y,x,getColorByValue(value), String.valueOf(value));
} else {
setCellValueEx(y,x,getColorByValue(value), "");
}
}
private Color getColorByValue(int value) { // ЦВЕТА ПЛИТОК
switch (value) {
case 0:
return Color.LIGHTGREY;
case 2:
return Color.AQUA;
case 4:
return Color.NAVAJOWHITE;
case 8:
return Color.CYAN;
case 16:
return Color.BLANCHEDALMOND;
case 32:
return Color.DEEPPINK;
case 64:
return Color.CORAL;
case 128:
return Color.MAGENTA;
case 256:
return Color.NAVY;
case 512:
return Color.CRIMSON;
case 1024:
return Color.CORNSILK;
case 2048:
return Color.GOLD;
}
return null;
}
private boolean compressRow(int[] row) { // Сдвиг влево
boolean zero = false;
for (int i = 0; i < row.length; i++) {
if (row[i] == 0) {
for (int j = i+1; j < row.length; j++) {
if (row[j] > 0) {
int tmp = row[j];
row[j] = 0;
row[i] = tmp;
zero = true;
break;
}
}
}
}
return zero;
}
private boolean mergeRow(int[] row) { // Слияние цифр если сдвиг произошел в лево.
boolean merge = false;
for (int i = 0; i < row.length-1; i++) {
if (row[i] == row[i+1] && row[i] != 0) {
row[i] = row[i] * 2;
row[i+1] = 0;
merge = true;
}
}
return merge;
}
private void rotateClockwise(){
int[][] tmp = new int[SIDE][SIDE];
for (int i = 0; i < tmp.length; i++) {
for (int j = 0; j < tmp[i].length; j++) {
tmp[i][j] = gameField[i][j];
}
}
for (int i = 0; i < tmp.length; i++) {
for (int j = 0; j < tmp[i].length; j++) {
gameField[i][j] = tmp[tmp.length-(1+j)][i];
}
}
}
@Override
public void onKeyPress(Key key){
if (key == Key.LEFT) {
moveLeft();
drawScene();
} else if (key == Key.RIGHT) {
moveRight();
drawScene();
} else if (key == key.UP) {
moveUp();
drawScene();
} else if (key == key.DOWN) {
moveDown();
drawScene();
}
}
private void moveLeft(){
boolean compress;
boolean merge;
int res = 0;
for (int i = 0; i < gameField.length; i++) {
compress = compressRow(gameField[i]);
merge = mergeRow(gameField[i]);
compressRow(gameField[i]);
if (compress || merge) {
res++;
}
}
if (res > 0) {
createNewNumber();
}
}
private void moveRight() {
rotateClockwise();
rotateClockwise();
boolean compress;
boolean merge;
int res = 0;
for (int i = 0; i < gameField.length; i++) {
compress = compressRow(gameField[i]);
merge = mergeRow(gameField[i]);
compressRow(gameField[i]);
if (compress || merge) {
res++;
}
}
rotateClockwise();
rotateClockwise();
if (res > 0) {
createNewNumber();
}
}
private void moveUp() {
rotateClockwise();
rotateClockwise();
rotateClockwise();
boolean compress;
boolean merge;
int res = 0;
for (int i = 0; i < gameField.length; i++) {
compress = compressRow(gameField[i]);
merge = mergeRow(gameField[i]);
compressRow(gameField[i]);
if (compress || merge) {
res++;
}
}
rotateClockwise();
if (res > 0) {
createNewNumber();
}
}
private void moveDown() {
rotateClockwise();
boolean compress;
boolean merge;
int res = 0;
for (int i = 0; i < gameField.length; i++) {
compress = compressRow(gameField[i]);
merge = mergeRow(gameField[i]);
compressRow(gameField[i]);
if (compress || merge) {
res++;
}
}
rotateClockwise();
rotateClockwise();
rotateClockwise();
if (res > 0) {
createNewNumber();
}
}
}