Вроде всё правильно работает, я хз..В условии не сильно конкретно сказано о условии задачи..при разных комбинациях перемещает элементы правильно и тру/фолс верный возвращает
package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
import java.util.Arrays;
public class Game2048 extends Game {
private static final int SIDE = 4;
private int[][] gameField = new int[SIDE][SIDE];
public void initialize(){
// int[] ii = {0,2,2,2};
// for (int i : ii)
// System.out.print(i + " ");
// System.out.println("");
// compressRow(ii);
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(i, j, gameField[j][i]);
}
}
private void createNewNumber(){
int x = getRandomNumber(SIDE);
int y = getRandomNumber(SIDE);
if (gameField[y][x] == 0){
if (getRandomNumber(10) < 9)
gameField[y][x] = 2;
else
gameField[y][x] = 4;
}
else
createNewNumber();
}
private Color getColorByValue(int value){
Color color = null;
switch (value){
case(0):
color = Color.BISQUE;
break;
case(2):
color = Color.YELLOW;
break;
case(4):
color = Color.ORANGE;
break;
case(8):
color = Color.PINK;
break;
case(16):
color = Color.AQUA;
break;
case(32):
color = Color.BLUE;
break;
case(64):
color = Color.SILVER;
break;
case(128):
color = Color.PURPLE;
break;
case(256):
color = Color.RED;
break;
case(512):
color = Color.GOLD;
break;
case(1024):
color = Color.GREEN;
break;
case(2048):
color = Color.FLORALWHITE;
break;
}
return color;
}
private void setCellColoredNumber(int x, int y, int value){
if (value == 0)
setCellValueEx(x, y, getColorByValue(value), "");
else
setCellValueEx(x, y, getColorByValue(value), String.valueOf(value));
}
private boolean compressRow(int[] row){
int[] tmp = new int[SIDE];
int k = 0;
for (int i = 0; i < SIDE; i++){
if (row[i] != 0) {
tmp[k] = row[i];
k++;
}
}
// while(k < SIDE){
// tmp[k] = 0;
// k++;
// }
if (Arrays.equals(tmp, row))
return false;
else {
row = tmp;
// for (int i : row)
// System.out.print(i + " ");
return true;
}
}
}
//Игра 2048 (7/18)
// Исходя из правил игры, мы можем сдвинуть все плитки в одну из 4 сторон: вверх, вниз, вправо, влево.
// При этом плитки со значением 2 и больше уходят в одну сторону (сторону сдвига), а пустые — в противоположную.
//
// На данном этапе реализуем сдвиг влево. Для этого нам понадобится приватный метод boolean compressRow(int[] row),
// который сдвигает все ненулевые элементы массива row влево (в сторону нулевого индекса), а нулевые элементы переносит вправо.
// Если хотя бы один элемент был передвинут, метод возвращает true, иначе – false.
//
// Примеры:
//
// - Было (0, 2, 0, 2), стало (2, 2, 0, 0). Метод вернул true.
// - Было (2, 2, 2, 2), стало (2, 2, 2, 2). Метод вернул false.
// - Было (0, 4, 0, 2), стало (4, 2, 0, 0). Метод вернул true.
// - Было (4, 2, 0, 2), стало (4, 2, 2, 0). Метод вернул true.
// - Было (2, 4, 0, 0), стало (2, 4, 0, 0). Метод вернул false.
//
//
// Требования:
// 1. В классе Game2048 должен быть создан приватный метод boolean compressRow(int[] row).
// 2. Метод compressRow(int[]) должен быть реализован в соответствии с условием задачи.
// 3. Метод compressRow(int[]) должен возвращать true, если он внес изменения во входящий массив и false, если изменений не было.
