Third requirement doesn't verify even if it is correct, checked against all the example inputs and a couple more of my own. Can't see where my mistake is.
package com.codegym.games.game2048;
import com.codegym.engine.cell.*;
import java.lang.reflect.Array;
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 i = 0; i < SIDE; i++) {
for (int j = 0; j < SIDE; j++) {
setCellColoredNumber(j, i, gameField[i][j]);
}
}
}
private void createNewNumber() {
int x = getRandomNumber(SIDE);
int 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) {
Color[] colors = {Color.WHITE, Color.GREEN, Color.DARKGREEN, Color.ORANGE,
Color.YELLOW, Color.BLUE, Color.INDIGO, Color.PURPLE,
Color.PINK, Color.BROWN, Color.CYAN};
int temp = 1;
for (int i = 0; i < 11; i++) {
if (value == (temp *= 2)) {
return colors[i];
}
}
return Color.GRAY;
}
private void setCellColoredNumber(int x, int y, int value) {
if (value == 0) {
setCellValueEx(x, y, Color.GRAY, "");
} else {
setCellValueEx(x, y, getColorByValue(value), String.valueOf(value));
}
}
private boolean compressRow(int[] row) {
int start = 0;
int end = row.length - 1;
int check = 0;
int[] rowModel = row.clone();
for (int i = 0; i < row.length; i++) {
int temp = row[i];
if (temp != 0) {
rowModel[start++] = temp;
} else rowModel[end--] = temp;
}
for (int i = 0; i < row.length; i++) {
if (row[i] != rowModel[i]) {
row[i] = rowModel[i];
check++;
}
}
if (check == 0) return false;
else return true;
}
public static void main(String[] args) {
Game2048 myGame = new Game2048();
int[] arr = {0, 4, 0, 4};
boolean b = myGame.mergeRow(arr);
System.out.println(b ? "true" : "false");
System.out.println(Arrays.toString(arr));
}
private boolean mergeRow(int[] row) {
int[] res = new int[4];
int check = 0;
for (int i = 0; i < 3; i++) {
if (row[i] == row[i + 1] && row[i] != 0) {
res[i] = 2 * row[i];
res[i + 1] = 0;
i++;
} else res[i] = row[i];
}
if (res[2] == 0) res[3] = row[3];
for (int i = 0; i < row.length; i++) {
if (row[i] != res[i]) {
row[i] = res[i];
check++;
}
}
if (check == 0) return false;
else return true;
}
@Override
public void initialize() {
setScreenSize(SIDE, SIDE);
createGame();
drawScene();
}
}