Не понимаю что хочет валидатор, работает но не проходить проверку.
package com.javarush.task.jdk13.task53.task5301;
import com.javarush.engine.cell.*;
import java.util.Arrays;
public class Game2048 extends Game {
private static final int SIDE = 4;
private int[][] gameField = new int[SIDE][SIDE];
private void createGame() {
createNewNumber();
createNewNumber();
}
private void drawScene() {
for (int row = 0; row < SIDE; row++) {
for (int col = 0; col < SIDE; col++) {
setCellColoredNumber(row, col, gameField[col][row]);
}
}
}
private void createNewNumber() {
do {
int x = getRandomNumber(SIDE);
int y = getRandomNumber(SIDE);
if (gameField[y][x] == 0) {
int number = getRandomNumber(10);
if (number == 9) {
gameField[y][x] = 4;
} else gameField[y][x] = 2;
break;
}
} while (true);
}
private Color getColorByValue(int value) {
int[] numbers = {0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048};
Color[] colors = {Color.AQUA, Color.BLUE, Color.RED, Color.YELLOW, Color.GREEN, Color.CYAN, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.AZURE, Color.GOLD, Color.LIME};
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == value) {
return colors[i];
}
}
return Color.AQUA;
}
private void setCellColoredNumber(int x, int y, int value) {
String stringValue = "" + value;
if (value == 0) {
setCellValueEx(x, y, Color.AQUA, "");
} else {
setCellValueEx(x, y, getColorByValue(value), stringValue);
}
}
private boolean compressRow(int[] row) {
int[] temp = Arrays.copyOf(row, row.length);
for (int i = 0; i < row.length; i++) {
if (row[i] == 0 && i != row.length - 1) {
for (int j = i + 1; j < row.length; j++) {
if (row[j] != 0) {
row[i] = row[j];
row[j] = 0;
break;
}
}
}
}
return !Arrays.equals(row, temp);
}
private boolean mergeRow(int[] row) {
int[] temp = row.clone();
for (int i = 0; i < row.length - 1; i++) {
if (row[i] != 0 && row[i + 1] == row[i]) {
row[i] += row[i + 1];
row[i + 1] = 0;
i++;
}
}
return !Arrays.equals(row, temp);
}
private void moveLeft() {
boolean isCompressed = false;
boolean isMerged = false;
for (int i = 0; i < SIDE; i++) {
if(compressRow(gameField[i])) isCompressed = true;
if (mergeRow(gameField[i])) isMerged = true;
if (isMerged) {
compressRow(gameField[i]);
}
}
if (isCompressed || isMerged) {
createNewNumber();
}
drawScene();
}
private void rotateClockwise () {
// Транспонируем массив
for (int i = 0; i < SIDE; i++) {
for (int j = i + 1; j < SIDE; j++) {
int temp = gameField[i][j];
gameField[i][j] = gameField[j][i];
gameField[j][i] = temp;
}
}
// Инвертируем столбцы
reverse(gameField);
}
private void reverse(int[][] array) {
for (int[] row : array) {
int index = 0;
for (int i = row.length - 1; i >= 0; i--) {
int temp = row[i];
row[i] = row[index];
row[index] = temp;
index++;
if (index >= i) break;
}
}
}
private void moveRight() {
rotateClockwise();
rotateClockwise();
moveLeft();
rotateClockwise();
rotateClockwise();
drawScene();
}
private void moveUp() {
rotateClockwise();
rotateClockwise();
rotateClockwise();
moveLeft();
rotateClockwise();
drawScene();
}
private void moveDown() {
rotateClockwise();
moveLeft();
rotateClockwise();
rotateClockwise();
rotateClockwise();
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();
}
}
@Override
public void initialize() {
setScreenSize(SIDE, SIDE);
createGame();
drawScene();
}
}