Задача решена, все условия соблюдены, при запуске программа работает без ошибок и по условию, однако задача не проходит тестирование и выдаёт ошибки
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 compressRow(int[] row)
{
boolean result = false;
int changes = 1;
while (changes > 0)
{
changes = 0;
for (int i = 0; i < row.length - 1; i++)
{
if (row[i] == 0 && row[i + 1] > 0)
{
row[i] = row[i + 1];
row[i + 1] = 0;
changes++;
result = true;
}
}
}
return result;
}
private boolean mergeRow(int[] row)
{
boolean result = false;
for (int i = 0; i < row.length - 1; i++)
{
if (row[i] == row[i + 1] && row[i] != 0)
{
row[i] += row[i + 1];
row[i + 1] = 0;
result = true;
}
}
return result;
}
private void moveLeft()
{
int methodCounter = 0;
for(int y = 0; y < SIDE; y++)
{
if(compressRow(gameField[y]))
methodCounter++;
}
for(int y = 0; y < SIDE; y++)
{
if(mergeRow(gameField[y]))
methodCounter++;
}
for(int y = 0; y < SIDE; y++)
{
if(compressRow(gameField[y]))
methodCounter++;
}
if (methodCounter > 0)
createNewNumber();
drawScene();
}
private void moveRight()
{
drawScene();
}
private void moveUp()
{
drawScene();
}
private void moveDown()
{
drawScene();
}
@Override
public void onKeyPress(Key key)
{
if (key == Key.LEFT)
moveLeft();
else if (key == Key.RIGHT)
moveRight();
else if (key == Key.UP)
moveUp();
else if (key == Key.DOWN)
moveDown();
}
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]);
}
}
}
private void createNewNumber()
{
int x ,y;
do {
x = getRandomNumber(SIDE);
y = getRandomNumber(SIDE);
} while (gameField[y][x] != 0);
if (getRandomNumber(10) == 1)
gameField[y][x] = 4;
else
gameField[y][x] = 2;
}
private Color getColorByValue(int value)
{
if (value == 0)
return Color.WHITE;
else if (value == 2)
return Color.LIGHTPINK;
else if (value == 4)
return Color.VIOLET;
else if (value == 8)
return Color.DEEPSKYBLUE;
else if (value == 16)
return Color.AQUAMARINE;
else if (value == 32)
return Color.FORESTGREEN;
else if (value == 64)
return Color.LIMEGREEN;
else if (value == 128)
return Color.ORANGE;
else if (value == 256)
return Color.DARKORANGE;
else if (value == 512)
return Color.ORANGERED;
else if (value == 1024)
return Color.HOTPINK;
else
return Color.DEEPPINK;
}
private void setCellColoredNumber(int x, int y, int value)
{
//setCellValueEx(int x, int y, Color cellColor, String value)
String s = "";
s += value;
if (value == 0)
setCellValueEx(x, y, getColorByValue(value), "");
else
setCellValueEx(x, y, getColorByValue(value), s);
}
}