Вопрос на миллион, что собственно тут не так?
package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
import java.util.LinkedList;
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 i = 0; i < gameField.length; i++) {
for (int j = 0; j < gameField[0].length; j++) {
setCellColoredNumber(j, i, gameField[i][j]);
}
}
}
private void createNewNumber() {
while (true) {
int randomX = getRandomNumber(SIDE);
int randomY = getRandomNumber(SIDE);
if (gameField[randomY][randomX] == 0) {
int random = getRandomNumber(10);
if (random == 9) {
gameField[randomY][randomX] = 4;
} else {
gameField[randomY][randomX] = 2;
}
break;
}
}
}
private void setCellColoredNumber(int x, int y, int value) {
String val;
if (value == 0) {
val = "";
} else {
val = value + "";
}
setCellValueEx(x, y, getColorByValue(value), val);
}
private Color getColorByValue(int value) {
Color color = Color.NONE;
switch (value) {
case 0:
return Color.GRAY;
case 2:
return Color.WHITE;
case 4:
return Color.BEIGE;
case 8:
return Color.PEACHPUFF;
case 16:
return Color.SANDYBROWN;
case 32:
return Color.ORANGE;
case 64:
return Color.CORAL;
case 128:
return Color.CORNSILK;
case 256:
return Color.BISQUE;
case 512:
return Color.YELLOW;
case 1024:
return Color.GOLD;
case 2048:
return Color.GOLDENROD;
}
return color;
}
private boolean compressRow(int[] row) {
int insertPos = 0;
boolean isChanged = false;
for (int i = 0; i < row.length; i++) {
if (row[i] != 0) {
if (i != insertPos) {
row[insertPos] = row[i];
row[i] = 0;
isChanged = true;
}
insertPos++;
}
}
return isChanged;
}
private boolean mergeRow(int[] row) {
boolean isChange = false;
for (int i = 0; i < row.length; i++) {
if (row[i] == 0) {
continue;
}
if (i < SIDE - 1 && row[i] == row[i + 1]) {
row[i] += row[i + 1];
row[i + 1] = 0;
isChange = true;
}
}
return isChange;
}
@Override
public void onKeyPress(Key key) {
if (key == Key.RIGHT) {
moveRight();
drawScene();
}
if (key == Key.LEFT) {
moveLeft();
drawScene();
}
if (key == Key.UP) {
moveUp();
drawScene();
}
if (key == Key.DOWN) {
moveDown();
drawScene();
}
}
private void moveLeft() {
boolean flag = false;
for (int i = 0; i < SIDE; i++) {
if (compressRow(gameField[i]) | mergeRow(gameField[i])) {
flag = true;
}
}
if (flag) {
createNewNumber();
}
}
private void moveRight() {
}
private void moveUp() {
}
private void moveDown() {
}
}