Not Able to verify
package com.codegym.games.game2048;
import com.codegym.engine.cell.*;
import java.util.Arrays;
public class Game2048 extends Game {
private int[][] gameField = new int[SIDE][SIDE];
private static final int SIDE = 4;
public void initialize(){
setScreenSize(SIDE, SIDE);
createGame();
drawScene();
createNewNumber();
}
private void createGame(){
createNewNumber();
createNewNumber();
}
private void drawScene(){
for (int i = 0;i < SIDE;i++){
for (int y = 0;y < SIDE;y++){
setCellColoredNumber(y,i,gameField[i][y]);
}
}
}
private void createNewNumber() {
int x = getRandomNumber(SIDE);
int y = getRandomNumber(SIDE);
int value;
if (getRandomNumber(10) == 9){
value = 4;
} else {
value = 2;
}
if (gameField[x][y] == 2 || gameField[x][y] == 4){
createNewNumber();
} else {
gameField[x][y] = value;
}
}
private Color getColorByValue(int value){
if (value == 0){
return Color.WHITE;
} else if (value == 2){
return Color.ALICEBLUE;
} else if (value == 4){
return Color.ANTIQUEWHITE;
} else if (value == 8){
return Color.AQUA;
} else if (value == 16){
return Color.AQUAMARINE;
} else if (value == 32){
return Color.AZURE;
} else if (value == 64){
return Color.BEIGE;
} else if (value == 128){
return Color.BISQUE;
} else if (value == 256){
return Color.BLACK;
} else if (value == 512){
return Color.BLANCHEDALMOND;
} else if (value == 1024){
return Color.BLUE;
} else if (value == 2048) {
return Color.BLUEVIOLET;
} else return Color.WHITE;
}
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) {
int temp = 0;
int[] rowtemp = row.clone();
boolean isChanged = false;
for(int i = 0; i < row.length; i++) {
for(int j = 0; j < row.length-i-1; j++){
if(row[j] == 0) {
temp = row[j];
row[j] = row[j+1];
row[j+1] = temp;
}
}
}
if(!Arrays.equals(row,rowtemp))
isChanged = true;
// row = rowtemp;
return isChanged;
}
private boolean mergeRow(int[] row){
boolean moved = false;
for (int i=0; i< row.length-1;i++)
if ((row[i] == row[i+1])&&(row[i]!=0)){
row[i] = 2*row[i];
row[i+1] = 0;
moved = true;
}
return moved;
}
@Override
public void onKeyPress(Key key){
if(key==Key.LEFT) {
moveLeft();
drawScene();
}
else if(key==Key.RIGHT) {
moveRight();
drawScene();
}
else if(key==Key.UP) {
moveUp();
drawScene();
}
else if(key==Key.DOWN) {
moveDown();
drawScene();
}
}
private void moveLeft() {
for (int i = 1; i < 5; i++) {
compressRow(gameField[i]);
if (!compressRow(gameField[i])) {
} else {
createNewNumber();
compressRow(gameField[i]);
}
}
}
private void moveRight(){
compressRow(gameField[SIDE]);
mergeRow(gameField[SIDE]);
// compressRow(gameField[SIDE]);
}
private void moveUp(){
compressRow(gameField[SIDE]);
mergeRow(gameField[SIDE]);
}
private void moveDown(){
compressRow(gameField[SIDE]);
mergeRow(gameField[SIDE]);
}
}