1.Значение 0 не должно отображаться на игровом поле.
2.В методе drawScene() должен быть заменен вызов метода setCellColor(int, int, Color) на setCellColoredNumber(int, int, int), чтобы значения и цвета плиток игрового поля на экране соответствовали значениям в матрице gameField.
код, в котором мне кажется проблема
private void drawScene(){
for(int i = 0; i <4; i++){
for(int j = 0; j <4; j++){
if(gameField[i][j] != 0){
setCellColoredNumber(j, i, gameField[i][j]);
}
}
}
}
полный код
package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
import com.javarush.engine.cell.Game;
public class Game2048 extends Game {
private static final int SIDE = 4;
Color[] colors = Color.values();
private int[][] gameField = new int[SIDE][SIDE];
@Override
public void initialize(){
setScreenSize(SIDE,SIDE);
createGame();
gameField[1][0] = 8;
drawScene();
}
private void setCellColoredNumber(int x, int y, int val){
Color col = getColorByValue(val);
String str = Integer.toString(val);
setCellValueEx(x, y, col, str);
}
private Color getColorByValue(int val){
if(val == 2){
return Color.PURPLE;
}
if(val == 4){
return Color.BLUE;
}
if(val == 8){
return Color.CYAN;
}
if(val == 16){
return Color.GREEN;
}
if(val == 32){
return Color.YELLOW;
}
if(val == 64){
return Color.ORANGE;
}
if(val == 128){
return Color.RED;
}
if(val == 256){
return Color.MAROON;
}
if(val == 512){
return Color.PINK;
}
if(val == 1024){
return Color.BEIGE;
}
if(val == 2048){
return Color.WHITE;
}
else{
return Color.BROWN;
}
}
private void createGame(){
createNewNumber();
createNewNumber();
}
private void drawScene(){
for(int i = 0; i <4; i++){
for(int j = 0; j <4; j++){
if(gameField[i][j] != 0){
setCellColoredNumber(j, i, gameField[i][j]);
}
}
}
}
private void createNewNumber(){
int i = getRandomNumber(SIDE);
int j = getRandomNumber(SIDE);
int val = getRandomNumber(10);
while(gameField[i][j] != 0){
i = getRandomNumber(SIDE);
j = getRandomNumber(SIDE);
}
if(val == 0){
gameField[i][j] = 4;
}
else{
gameField[i][j] = 2;
}
}
}package com.javarush.games.game2048;
import com.javarush.engine.cell.*;
import com.javarush.engine.cell.Game;
public class Game2048 extends Game {
private static final int SIDE = 4;
Color[] colors = Color.values();
private int[][] gameField = new int[SIDE][SIDE];
@Override
public void initialize(){
setScreenSize(SIDE,SIDE);
createGame();
gameField[1][0] = 8;
drawScene();
}
private void setCellColoredNumber(int x, int y, int val){
Color col = getColorByValue(val);
String str = Integer.toString(val);
setCellValueEx(x, y, col, str);
}
private Color getColorByValue(int val){
if(val == 2){
return Color.PURPLE;
}
if(val == 4){
return Color.BLUE;
}
if(val == 8){
return Color.CYAN;
}
if(val == 16){
return Color.GREEN;
}
if(val == 32){
return Color.YELLOW;
}
if(val == 64){
return Color.ORANGE;
}
if(val == 128){
return Color.RED;
}
if(val == 256){
return Color.MAROON;
}
if(val == 512){
return Color.PINK;
}
if(val == 1024){
return Color.BEIGE;
}
if(val == 2048){
return Color.WHITE;
}
else{
return Color.BROWN;
}
}
private void createGame(){
createNewNumber();
createNewNumber();
}
private void drawScene(){
for(int i = 0; i <4; i++){
for(int j = 0; j <4; j++){
if(gameField[i][j] != 0){
setCellColoredNumber(j, i, gameField[i][j]);
}
}
}
}
private void createNewNumber(){
int i = getRandomNumber(SIDE);
int j = getRandomNumber(SIDE);
int val = getRandomNumber(10);
while(gameField[i][j] != 0){
i = getRandomNumber(SIDE);
j = getRandomNumber(SIDE);
}
if(val == 0){
gameField[i][j] = 4;
}
else{
gameField[i][j] = 2;
}
}
}
