вообщем я попытался, но видимо слабовато... Подскажите пожалуйста 😑
package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
public class Game2048 extends Game {
//перемен. и объекты
private static final int SIDE = 4;
private int[][] gameField = new int[SIDE][SIDE];
//1 метод. создание окна.
public void initialize(){
setScreenSize(SIDE, SIDE);
createGame();
drawScene();
}
//2 метод. создание основ игры.
private void createGame(){
createNewNumber();
createNewNumber();
}
//3 метод. игровое поле (цвета)
private void drawScene(){
for (int i = 0; i < gameField.length; i++) {
for (int j = 0; j < gameField.length; j++) {
setCellColoredNumber(i, j, gameField[j][i]);
}
}
}
//4 метод. спавн цифр в ячейках.
private void createNewNumber(){
int x = getRandomNumber(SIDE);
int y = getRandomNumber(SIDE);
int newNumber = getRandomNumber(10) == 9 ? 4 : 2;
while (true){
if (gameField[x][y] == 0){
gameField[x][y] = newNumber;
break;
}
else
x = getRandomNumber(SIDE);
y = getRandomNumber(SIDE);
}
}
//5 метод. разные цветка разным цифрам.
private Color getColorByValue(int value){
if (value == 0){return Color.WHITE;}
else if (value == 2){return Color.GREY;}
else if (value == 4){return Color.YELLOW;}
else if (value == 8){return Color.GREEN;}
else if (value == 16){return Color.ORANGE;}
else if (value == 32){return Color.AQUA;}
else if (value == 64){return Color.RED;}
else if (value == 128){return Color.AZURE;}
else if (value == 256){return Color.BLUE;}
else if (value == 512){return Color.BEIGE;}
else if (value == 1024){return Color.ALICEBLUE;}
else if (value == 2048){return Color.AQUAMARINE;}
return null;
}
//6 метод. дополнение (5)
private void setCellColoredNumber(int x, int y, int value){
String str = Integer.toString(value);
if (value == 0) {
setCellValueEx(x,y, getColorByValue(value), "");
}
else {
setCellValueEx(x, y, getColorByValue(value), str);
}}
//7 метод. сдвиг влево
private boolean compressRow(int[] row){
boolean move = false;
for (int i = 1; i < row.length; i++){
if (row[i]==0)continue;
if (row[i] != 0 && row[i-1] == 0){
row[i-1] = row[i];
row[i] = 0;
move = true;
i = 0;
}
}
return move;
}
//метод 8. доп (7) при сдвиге делаем +
private boolean mergeRow(int[] row){
boolean tof = false;
for (int i = 0; i < row.length - 1; i++){
if (row[i] == row[i + 1] && row[i] != 0){
row[i] *=2;
row[i + 1] = 0;
i++;
tof = true;
}
}
return tof;
}
//метод 9. движение - это жизнь
@Override
public void onKeyPress(Key key) {
if (key == Key.LEFT){
moveLeft();
drawScene();
}
if (key == Key.RIGHT){
moveRight();
drawScene();
}
if (key == Key.DOWN){
moveDown();
drawScene();
}
if (key == Key.UP){
moveUp();
drawScene();
}
}
private void moveLeft(){
int count = 0;
for (int i = 0; i < SIDE; i++){
if (compressRow(gameField[i])){count++;}
if (mergeRow(gameField[i])){count++;}
if (compressRow(gameField[i])){count++;}
}
if (count > 0){
createNewNumber();
drawScene();
}
}
private void moveRight(){
}
private void moveDown(){
}
private void moveUp(){
}
//метод 10. мудрёная хуйня - короче метод сдвига написан, надо написать метод который поворачивает матрицу влево по часовой стрелке 0_0 чтоб вызывать тот метод
private void rotateClockwise(){
int[][] rotateMatrix = new int[SIDE][SIDE];
for (int i = 0; i < rotateMatrix.length; i++){
for (int j = 0; j < rotateMatrix[i].length; j++){
rotateMatrix[rotateMatrix[i].length - j - 1][i] = gameField[j][i];
}
}
gameField = rotateMatrix;
}
}