I have used Arrays.equals() method to check whether the row is changed or not. But it is unable to meet the requirement. Could anyone help me to resolve the issue.
package com.codegym.games.game2048;
import com.codegym.engine.cell.*;
import java.util.*;
public class Game2048 extends Game{
private static final int SIDE = 4;
// private int[][] gameFiled = new int[SIDE][SIDE];
private int[][] gameField = new int[SIDE][SIDE];
public void initialize() {
setScreenSize(SIDE,SIDE);
createGame();
drawScene();
}
private void createGame() {
createNewNumber();
createNewNumber();
}
private boolean compressRow(int[] row) {
int temp = 0;
int[] rowtemp = row;
boolean isChanged = false;
for(int i = 0; i < row.length; i++) {
for(int j=0; j < row.length-i-1; j++){
if(rowtemp[j] == 0) {
temp = rowtemp[j];
rowtemp[j] = rowtemp[j+1];
rowtemp[j+1] = temp;
}
}
}
if(!Arrays.equals(row,rowtemp))
isChanged = true;
row = rowtemp;
return isChanged;
}
private void createNewNumber() {
int x = getRandomNumber(SIDE);
int y = getRandomNumber(SIDE);
int value = getRandomNumber(10);
while(gameField[x][y] != 0 ){
x = getRandomNumber(SIDE);
y = getRandomNumber(SIDE);
}
if(value >= 0 && value <=8)
gameField[x][y] = 2;
else
gameField[x][y] = 4;
}
private void drawScene() {
for(int i = 0; i < SIDE; i++ ) {
for(int j = 0; j < SIDE; j++) {
setCellColoredNumber(i,j,gameField[j][i]);
}
}
}
private void setCellColoredNumber(int x, int y, int value) {
//getColorByValue(value);
if(value == 0)
setCellValueEx(x,y,getColorByValue(value),"");
else
setCellValueEx(x,y,getColorByValue(value),String.valueOf(value));
}
private Color getColorByValue(int value){
if(value == 2)
return Color.VIOLET;
if(value == 4)
return Color.BLUE;
if(value == 8)
return Color.ORANGE;
if(value == 16)
return Color.PINK;
if(value == 32 )
return Color.MAROON;
if(value == 64 )
return Color.GREEN;
if(value == 128)
return Color.YELLOW;
if(value == 256)
return Color.RED;
if(value == 512)
return Color.INDIGO;
if(value == 1024)
return Color.BROWN;
if(value == 2048)
return Color.CYAN;
else
return Color.WHITE;
}
}