Задача не проходит тестирование, хотя блоки кода onKeyPress и moveLeft идентичные при сверке с правильным ответом
package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
import java.util.Arrays;
public class Game2048 extends Game {
private static final int SIDE = 4; // размер стороны игрового поля в клетках
// private int[][] gameField = {{2, 2, 0, 2}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}; // матрица игрового поля
private int[][] gameField = new int[SIDE][SIDE];
@Override
public void initialize() {
printMatrix();
setScreenSize(SIDE,SIDE);
createGame();
drawScene();
printMatrix();
// System.out.println(compressRow(new int[]{2, 0, 4, 0}));
// System.out.println(mergeRow(new int[]{2, 2, 2, 2}));
}
@Override
public void onKeyPress(Key key) {
if (key == Key.UP) {
moveUp();
} else if (key == Key.RIGHT) {
moveRight();
} else if (key == Key.DOWN) {
moveDown();
} else if (key == Key.LEFT) {
moveLeft();
} else {
return;
}
drawScene();
}
private void createGame() {
createNewNumber();
createNewNumber();
}
private void createNewNumber() {
while (true) {
int x = getRandomNumber(SIDE);
int y = getRandomNumber(SIDE);
if (gameField[x][y] == 0) {
gameField[x][y] = getRandomNumber(10) < 9 ? 2 : 4;
break;
}
}
}
private void setCellColoredNumber(int x, int y, int value) {
Color color = getColorByValue(value);
String str = value > 0 ? "" + value : "";
setCellValueEx(x, y, color, str);
}
private Color getColorByValue(int value) {
switch (value) {
case 0: { return Color.ALICEBLUE; }
case 2: { return Color.YELLOW; }
case 4: { return Color.YELLOWGREEN; }
case 8: { return Color.BLUE; }
case 16: { return Color.LIGHTBLUE; }
case 32: { return Color.GREEN; }
case 64: { return Color.LIGHTGREEN; }
case 128: { return Color.ORANGE; }
case 256: { return Color.ORANGERED; }
case 512: { return Color.RED; }
case 1024: { return Color.PURPLE; }
case 2048: { return Color.DARKVIOLET; }
default: { return Color.NONE; }
}
}
private void moveLeft() {
boolean isNewNumberNeeded = false;
for (int[] row : gameField) {
boolean wasCompressed = compressRow(row);
boolean wasMerged = mergeRow(row);
if (wasMerged) {
compressRow(row);
}
if (wasCompressed || wasMerged) {
isNewNumberNeeded = true;
}
}
if (isNewNumberNeeded) {
createNewNumber();
}
}
private void moveRight() {
}
private void moveUp() {
}
private void moveDown() {
}
private boolean compressRow(int[] row) { // сдвигает ячейки влево
System.out.println(Arrays.toString(row));
boolean isMove = false;
int currentIndex= 0;
for (int i = 0; i < SIDE - 1; i++) {
if (row[currentIndex] == 0) {
if (row[i + 1] != 0) {
row[currentIndex] = row[i + 1];
row[i + 1] = 0;
isMove = true;
}
} else {
currentIndex++;
}
}
System.out.println(Arrays.toString(row));
return isMove; // если значение true, значит были перемещения
}
private boolean mergeRow(int[] row) { // производит слияние одинаковых пар ячеек
boolean isMerge = false;
System.out.println(Arrays.toString(row));
for (int i = 0; i < SIDE - 1; i++) {
if (row[i] != 0 && row[i] == row[i + 1]) {
row[i] = row[i] * 2;
row[i + 1] = 0;
isMerge = true;
}
}
System.out.println(Arrays.toString(row));
return isMerge; // если значение true, значит были удвоения
}
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 printMatrix() {
for (int x = 0; x < SIDE; x++) {
for (int y = 0; y < SIDE; y++) {
System.out.print(gameField[x][y]);
}
System.out.println();
}
}
}