Сделано по полной аналогии прошлого шага, но в этот раз валидатор не пропускает
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);
createGame();
drawScene();
}
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);
if (gameField[x][y] == 0) {
if (getRandomNumber(10) < 9) {
gameField[x][y] = 2;
}
else {
gameField[x][y] = 4;
}
}
else createNewNumber();
}
private Color getColorByValue(int value) {
switch (value) {
case 0: return Color.LIGHTGRAY;
case 2: return Color.RED;
case 4: return Color.YELLOW;
case 8: return Color.GREEN;
case 16: return Color.ORANGE;
case 32: return Color.BROWN;
case 64: return Color.PINK;
case 128: return Color.GRAY;
case 256: return Color.PURPLE;
case 512: return Color.SILVER;
case 1024: return Color.WHITE;
case 2048: return Color.LIME;
}
return Color.BLACK;
}
private void setCellColoredNumber(int x,int y,int value) {
Color col = getColorByValue(value);
setCellValueEx(x,y,col, (value == 0) ? "" : "" + String.valueOf(value));
}
private boolean compressRow(int[] row) {
int[] tmprow = new int[SIDE];
int tmp = 0;
int n = 0;
boolean isRow;
for (int i=0;i<SIDE;i++) {
if (row[i] != 0) {
tmprow[tmp] = row[i];
tmp++;
}
}
for (int i=0;i<SIDE;i++) {
if (tmprow[i] != row[i]) {
n++;
}
}
if (n == 0) {
isRow = false;
}
else {
isRow = true;
}
for (int i=0;i<SIDE;i++) {
row[i] = tmprow[i];
}
return isRow;
}
private boolean mergeRow(int[] row) {
int[] tmprow = row;
int n = 0;
boolean isRow;
for (int i=0;i<SIDE-1;i++) {
if (tmprow[i] == tmprow[i+1]) {
tmprow[i] = tmprow[i]*2;
tmprow[i+1] = 0;
}
}
for (int i=0;i<SIDE-1;i++) {
if (tmprow[i] != row[i]) {
n++;
}
}
if (n == 0) {
isRow = false;
}
else {
isRow = true;
}
for (int i=0;i<SIDE;i++) {
row[i] = tmprow[i];
}
return isRow;
}
}