Проверял по разному работает вроде верно, 2 и 3 пункт не проходит
package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
import java.util.HashMap;
public class Game2048 extends Game {
private static final int SIDE = 4;
private int[][] gameField = new int[SIDE][SIDE];
public void initialize(){
setScreenSize(SIDE, SIDE);
createGame();
drawScene();
}
private void createGame(){
for (int x = 0; x <= 1; x++){
createNewNumber();
}
}
private void drawScene(){
for (int x = 0; x < SIDE; x++){
for (int y = 0; y < SIDE; y++) {
setCellColoredNumber(x, y, gameField[y][x]);
}
}
}
private void createNewNumber(){
int x = getRandomNumber(SIDE), y = getRandomNumber(SIDE);
while (gameField[x][y] != 0){
x = getRandomNumber(SIDE);
y = getRandomNumber(SIDE);
}
if (getRandomNumber(10) == 9){
gameField[x][y] = 4;
} else gameField[x][y] = 2;
}
private Color getColorByValue(int value){
HashMap<Integer, Color> matritsaColor = new HashMap<>();
matritsaColor.put(0, Color.WHITE);
for (int x = 2, y = 3; x <= 2048; x = x * 2, y++){
matritsaColor.put(x, Color.values()[y]);
}
return matritsaColor.get(value);
}
private void setCellColoredNumber(int x, int y, int value){
if (value == 0){
setCellValueEx(x, y, getColorByValue(value), "");
} else {
setCellValueEx(x, y, getColorByValue(value), Integer.toString(value));
}
}
private boolean compressRow(int[] row){
boolean sdvig = false;
for (int a = 0; a < row.length; a++){
for (int b = a + 1; b <= row.length; b++){
if (row[a] == 0 && row[b] != 0){
sdvig = true;
int tempB = row[b];
row[b] = row[a];
row[a] = tempB;
}
}
}
return sdvig;
}
}