Тесты проходит, но валидатор не пущает!
С копией массива тоже пробовал - тоже не проходит :(
private boolean compressRow(int[] row) {
boolean retVal = false;
for (int i = 0; i < row.length - 1; i++) {
for (int j = i; j < row.length-1; j++) {
if (row[j] == 0 && row[j + 1] != 0) {
retVal = true;
row[j] = row[j + 1];
row[j + 1] = 0;
}
}
}
return retVal;
}
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];
@Override
public void initialize() {
setScreenSize(SIDE, SIDE);
/*
int val = 2;
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 4; x++){
gameField[y][x] = val;
val *= 2;
}
}
gameField[2][3] = 0;
*/
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]);
}
}
/*
for (int y = 0;y<SIDE; y++){
for (int x=0;x<SIDE; x++){
System.out.print(gameField[y][x] + " ");
}
System.out.println();
}
*/
}
private void setCellColoredNumber(int x, int y, int value) {
if (value != 0) {
setCellValueEx(x, y, getColorByValue(value), Integer.toString(value));
} else {
setCellValueEx(x, y, getColorByValue(value), "");
}
}
private boolean compressRow(int[] row) {
boolean retVal = false;
for (int i = 0; i < row.length - 1; i++) {
for (int j = i; j < row.length-1; j++) {
if (row[j] == 0 && row[j + 1] != 0) {
retVal = true;
row[j] = row[j + 1];
row[j + 1] = 0;
}
}
}
return retVal;
}
private Color getColorByValue(int value) {
switch (value) {
case 0:
return Color.WHITE;
case 2:
return Color.LIGHTPINK;
case 4:
return Color.BLUEVIOLET;
case 8:
return Color.BLUE;
case 16:
return Color.CYAN;
case 32:
return Color.LIGHTSEAGREEN;
case 64:
return Color.LIMEGREEN;
case 128:
return Color.ORANGE;
case 256:
return Color.INDIANRED;
case 512:
return Color.RED;
case 1024:
return Color.MAGENTA;
case 2048:
return Color.MEDIUMVIOLETRED;
}
return Color.NONE;
}
private void createNewNumber() {
int x, y;
do {
y = getRandomNumber(SIDE);
x = getRandomNumber(SIDE);
} while (gameField[y][x] != 0);
if (getRandomNumber(10) < 9) { // присваиваем ячейке значение 2 с вероятностью 90%
// или 4 с вероятностью 10%
gameField[y][x] = 2;
} else {
gameField[y][x] = 4;
}
}
}