private boolean compressRow(int[] row) {
int row_total_prod = 1;
int row_total_sum = 0;
Integer [] rowSort = new Integer[row.length];
int[] rowSortarr = new int[row.length];
boolean res = false;
for (int i = row.length - 1; i > -1; i--) {
row_total_sum = row_total_sum + row[i];
row_total_prod = row_total_prod * row[i];
rowSort[i] = Integer.valueOf(row[i]);
}
Arrays.sort(rowSort, Collections.reverseOrder());
for (int i = row.length - 1; i > -1; i--)
{
rowSortarr[i] = rowSort[i].intValue();
}
if (row_total_sum > 0 && row_total_prod == 0) {
while (!Arrays.equals(row, rowSortarr)) {
for (int i = row.length - 1; i > 0; i--) {
if (row[i] > 0 && row[i - 1] == 0) {
row[i - 1] = row[i];
row[i] = 0;
res = true;
} else {
continue;
}
}
}
}
return res;
}
package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
import java.util.*;
public class Game2048 extends Game {
private static final int SIDE = 4;
private int[][] gameField = new int[SIDE][SIDE];
public void initialize()
{
setScreenSize(SIDE, SIDE);
createGame();
drawScene();
}
private boolean compressRow(int[] row) {
int row_total_prod = 1;
int row_total_sum = 0;
Integer [] rowSort = new Integer[row.length];
int[] rowSortarr = new int[row.length];
boolean res = false;
int total = 0;
for (int i = row.length - 1; i > -1; i--) {
row_total_sum = row_total_sum + row[i];
row_total_prod = row_total_prod * row[i];
rowSort[i] = Integer.valueOf(row[i]);
}
Arrays.sort(rowSort, Collections.reverseOrder());
for (int i = row.length - 1; i > -1; i--)
{
rowSortarr[i] = rowSort[i].intValue();
}
if (row_total_sum > 0 && row_total_prod == 0) {
while (!Arrays.equals(row, rowSortarr)) {
for (int i = row.length - 1; i > 0; i--) {
if (row[i] > 0 && row[i - 1] == 0) {
row[i - 1] = row[i];
row[i] = 0;
res = true;
} else {
continue;
}
}
System.out.println(Arrays.equals(row, rowSortarr));
}
}
return res;
}
private Color getColorByValue(int value)
{
Color color = Color.NONE;
switch (value)
{
case 0 : color = Color.NONE;
break;
case 2 : color = Color.LIGHTPINK;
break;
case 4 : color = Color.PURPLE;
break;
case 8 : color = Color.LIGHTBLUE;
break;
case 16: color = Color.LIGHTCYAN;
break;
case 32: color = Color.GREEN;
break;
case 64: color = Color.LIGHTGREEN;
break;
case 128: color = Color.LIGHTSALMON;
break;
case 256: color = Color.PINK;
break;
case 512: color = Color.ORANGE;
break;
case 1024: color = Color.SALMON;
break;
case 2048: color = Color.ROSYBROWN;
break;
}
return color;
}
private void setCellColoredNumber(int x, int y, int value)
{
Color color;
color = getColorByValue(value);
if (value>0)
{
setCellValueEx(x, y, color, value+"");
}
else
{
setCellValueEx(x, y, color, "");
}
}
private void createNewNumber()
{
int x = 0;
int y = 0;
int fieldVal = 0;
/* while (x == 0) */x = getRandomNumber(SIDE);
/* while (y == 0) */y = getRandomNumber(SIDE);
fieldVal = getRandomNumber(10);
if (gameField[x][y] == 0)
{
if (fieldVal < 9)
{
gameField[y][x] = 2;
}
else
{
gameField[y][x] = 4;
}
}
else
{
createNewNumber();
}
}
private void drawScene()
{
for (int x = 0;x<SIDE; x++ )
{
for (int y = 0; y<SIDE;y++)
{
//setCellColor(x, y, Color.LIGHTGRAY);
setCellColoredNumber(x, y, gameField[y][x] );
}
}
}
private void createGame()
{
createNewNumber();
createNewNumber();
}
}