package com.javarush.games.game2048; import com.javarush.engine.cell.Game; import com.javarush.engine.cell.*; public class Game2048 extends Game { private static final int SIDE = 4; private int[][] gameField = new int[4][4]; public void initialize() { setScreenSize(SIDE, SIDE); createGame(); drawScene(); } private void createGame() { createNewNumber(); createNewNumber(); } private void createNewNumber() { int x = getRandomNumber(SIDE); int y = getRandomNumber(SIDE); int rand = getRandomNumber(10) /*== 9 ? 4 : 2*/; boolean check = true; while (check) { if (gameField[x][y] == 0) { if (rand != 9) { gameField[x][y] = 2; } else { gameField[x][y] = 4; } check = false; } else { x = getRandomNumber(SIDE); y = getRandomNumber(SIDE); } } } 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, value + ""); } } private Color getColorByValue(int value) { Color color = null; switch (value) { case 0: color = Color.WHITE; break; case 2: color = Color.BLUE; break; case 4: color = Color.GOLD; break; case 8: color = Color.BLUEVIOLET; break; case 16: color = Color.BEIGE; break; case 32: color = Color.BISQUE; break; case 64: color = Color.BLACK; break; case 128: color = Color.GREENYELLOW; break; case 256: color = Color.LIGHTGOLDENRODYELLOW; break; case 512: color = Color.DARKMAGENTA; break; case 1024: color = Color.CHOCOLATE; break; case 2048: color = Color.OLIVEDRAB; break; } return color; } private boolean compressRow(int[] row) { boolean flagCheck = false; for (int i = 0; i < row.length ; i++) { if (row[i] == 0){ for (int j = i; j < row.length ; j++) if (row[j] != 0){ int tmp = row[i]; row[i] = row[j]; row[j] = tmp; flagCheck = true; } }else{} } return flagCheck; } private void drawScene() { for (int i = 0; i < gameField.length; i++) { for (int j = 0; j < gameField.length; j++) setCellColoredNumber(j, i, gameField[i][j]); } } }