Подскажите, пожалуйста, что не так?
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];
@Override
public void initialize() {
setScreenSize(SIDE, SIDE);
createGame();
drawScene();
}
private void createGame() {
createNewNumber();
createNewNumber();
}
private void drawScene() {
for (int y = 0; y < SIDE; y++) {
for (int x = 0; x < SIDE; x++) {
setCellColoredNumber(x, y, gameField[y][x]);
}
}
}
@Override
public void onKeyPress(Key key) {
switch (key) {
case LEFT :
moveLeft();
drawScene();
break;
case RIGHT :
moveRight();
drawScene();
break;
case UP :
moveUp();
drawScene();
break;
case DOWN :
moveDown();
drawScene();
}
}
private void moveLeft() {
boolean isShiftedOrMerged = false;
for (int i = 0; i < SIDE; i++) {
if (compressRow(gameField[i]) || mergeRow(gameField[i])) {
compressRow(gameField[i]);
isShiftedOrMerged = true;
}
}
if (isShiftedOrMerged == true) {
createNewNumber();
}
}
private void moveRight() {
}
private void moveUp() {
}
private void moveDown() {
}
private boolean compressRow(int[] row) {
boolean isShifted = false;
for (int i = 0; i < row.length - 1; i++) {
for (int j = 0; j < row.length - 1; j++) {
if (row[j] == 0 && row[j + 1] != 0) {
int tmp = row[j];
row[j] = row[j + 1];
row[j + 1] = tmp;
isShifted = true;
}
}
}
return isShifted;
}
private boolean mergeRow(int[] row) {
boolean isMerged = false;
for (int i = 0; i < row.length - 1; i++) {
if (row[i] != 0 && row[i] == row[i + 1]) {
row[i] *= 2;
row[i + 1] = 0;
isMerged = true;
}
}
return isMerged;
}
private void createNewNumber() {
int x = 0;
int y = 0;
while (true) {
x = getRandomNumber(SIDE);
y = getRandomNumber(SIDE);
if (gameField[y][x] == 0) {
break;
}
}
if (getRandomNumber(10) == 9) {
gameField[y][x] = 4;
} else {
gameField[y][x] = 2;
}
}
private void setCellColoredNumber(int x, int y, int value) {
Color color = getColorByValue(value);
if (value == 0) {
setCellValueEx(x, y, color, "");
} else {
setCellValueEx(x, y, color, String.valueOf(value));
}
}
private Color getColorByValue(int value) {
int count = 2;
while (value / 2 > 0) {
value /= 2;
count++;
}
return Color.values()[count];
}
}