Вывод в консоль верный, последний пункт упорно не пропускает (
package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
public class Game2048 extends Game{
private static final int SIDE = 4;
private int[][] gameField =
{{2, 4, 8, 16},
{32, 64, 128, 256},
{512, 1024, 2048, 0},
{32, 64, 128, 16}};
@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 Color getColorByValue(int value){
Color color = Color.WHITE;
switch(value){
case 2: color = Color.PINK;break;
case 4: color = Color.VIOLET;break;
case 8: color = Color.INDIGO;break;
case 16: color = Color.BLUE;break;
case 32: color = Color.GREEN;break;
case 64: color = Color.SALMON;break;
case 128: color = Color.ORANGE;break;
case 256: color = Color.CORAL;break;
case 512: color = Color.ORCHID;break;
case 1024: color = Color.MAGENTA;break;
case 2048: color = Color.CHOCOLATE;break;
}
return color;
}
private void setCellColoredNumber(int x, int y, int value){
Color color = getColorByValue(value);
if (value == 0) setCellValueEx(x,y,color,"");
else setCellValueEx(x,y,color,String.valueOf(value));
}
private void createNewNumber() {
int x, y;
do {
x = getRandomNumber(SIDE);
y = getRandomNumber(SIDE);
} while (gameField[y][x] != 0);
if (getRandomNumber(10) == 9)
gameField[y][x] = 4;
else gameField[y][x] = 2;
}
private boolean compressRow(int[] row){
//
boolean isChanged = false;
for (int i = 0; i < row.length - 1; i++) {
if (row[i] == 0 && row[i] != row[i + 1]) {
isChanged = true;
row[i] = row[i + 1];
row[i + 1] = 0;
}
}
if (isChanged) {
compressRow(row);
}
return isChanged;
}
private boolean mergeRow(int[] row) {
boolean isChanged = false;
for (int i = 0; i < row.length - 1; i++) {
if (row[i] != 0 && row[i + 1] != 0 &&row[i + 1] == row[i] ) {
row[i] += row[i + 1];
row[i+1] = 0;
isChanged = true;
}
}
return isChanged;
}
@Override
public void onKeyPress(Key key){
if(key == Key.LEFT){
moveLeft();
}else if(key == Key.RIGHT){
moveRight();
}else if(key == Key.UP){
moveUp();
}else if(key == Key.DOWN){
moveDown();
}
}
private void rotateClockwise(){
int[][] rotateMatrix = new int[SIDE][SIDE];
for(int i = SIDE - 1, c = 0;i >= 0;i--,c++){
for(int j = SIDE - 1, k = 0;j >= 0;j--,k++){
rotateMatrix[c][k] = gameField[j][i];
}
}
gameField = rotateMatrix;
}
private void moveLeft(){
boolean isChanged = false;
for (int i = 0; i < SIDE; i++) {
if (compressRow(gameField[i])) {
isChanged = true;
}
if (mergeRow(gameField[i])) {
isChanged = true;
compressRow(gameField[i]);
}
}
if (isChanged) createNewNumber();
drawScene();
}
private void moveRight(){
drawScene();
}
private void moveUp(){
drawScene();
}
private void moveDown(){
drawScene();
}
}