Метод mergeTiles должен быть реализован в соответствии с условием задачи.
Метод compressTiles должен быть реализован в соответствии с условием задачи.
package com.javarush.task.task35.task3513;
import java.util.ArrayList;
import java.util.List;
public class Model {
private static final int FIELD_WIDTH = 4;
private Tile[][] gameTiles = new Tile[FIELD_WIDTH][FIELD_WIDTH];
protected int score;
protected int maxTile;
public Model() {
resetGameTiles();
score = 0;
maxTile = 2;
}
private void addTile() {
List<Tile> list = getEmptyTiles();
if (list.size() > 0) {
list.get((int) (list.size()*Math.random())).value = Math.random() < 0.9 ? 2 : 4;
}
}
private ArrayList<Tile> getEmptyTiles() {
ArrayList<Tile>listTiles = new ArrayList<>();
for (int i = 0; i < FIELD_WIDTH; i++) {
for (int j = 0; j < FIELD_WIDTH; j++) {
if (gameTiles[i][j].value == 0){
listTiles.add(gameTiles[i][j]);
}
}
}
return listTiles;
}
public void resetGameTiles(){
for (int i = 0; i < FIELD_WIDTH; i++) {
for (int j = 0; j < FIELD_WIDTH; j++) {
gameTiles[i][j] = new Tile();
}
}
addTile();
addTile();
}
private void compressTiles(Tile[] tiles){
for(int i = tiles.length-1 ; i > 0 ; i--){
for(int j = 0 ; j < i ; j++){
if( tiles[j].value== 0 ) {
int tmp = tiles[j].value;
tiles[j] = tiles[j+1];
tiles[j+1].value = tmp;
}
}
}
}
private void mergeTiles(Tile[] tiles){
for (int i = 1; i < tiles.length ; i++) {
if (tiles[i-1].value==tiles[i].value){
tiles[i-1].value*= 2;
tiles[i].value = 0;
if (tiles[i-1].value > maxTile)
maxTile = tiles[i-1].value;
score+=tiles[i-1].value;
}
}
compressTiles(tiles);
}
}