Все работает правильно, перепробовал все комбинации... и не проходит по 5 и 6 пунктам... помогите плиз!
package com.javarush.task.task35.task3513;
import java.util.*;
import java.util.stream.IntStream;
public class Model {
private static final int FIELD_WIDTH = 4;
private static Tile[][] gameTiles;
protected int score = 0;
protected int maxTile = 2;
public Model() {
resetGameTiles();
}
public void resetGameTiles() {
gameTiles = new Tile[FIELD_WIDTH][FIELD_WIDTH];
for (int i = 0; i < gameTiles.length; i++) {
for (int j = 0; j < gameTiles[0].length; j++) {
gameTiles[i][j] = new Tile();
}
}
/*IntStream.range(0, FIELD_WIDTH).forEach(
i-> {
IntStream.range(0, FIELD_WIDTH).forEach(
j-> gameTiles[j][i] = new Tile()
);
}
);*/
addTile();
addTile();
}
private void addTile() {
List<Tile> emptyTiles = getEmptyTiles();
if(emptyTiles.size()>0) {
emptyTiles.get((int) (Math.random() * emptyTiles.size())).value = (Math.random() < 0.9) ? 2 : 4;
}
}
private List< Tile> getEmptyTiles() {
List<Tile> tiles = new ArrayList<>();
IntStream.range(0, FIELD_WIDTH).forEach((i) -> {
Arrays.stream(gameTiles[i])
.filter(Tile::isEmpty)
.forEach(tiles::add);
});
/*for (int i = 0; i <gameTiles.length ; i++) {
for (int j = 0; j <gameTiles[0].length ; j++) {
if(gameTiles[j][i].isEmpty()){
tiles.add(gameTiles[j][i]);
}
}
}*/
return tiles;
}
private boolean compressTiles(Tile[] tiles) {
boolean x = false;
for (int j = tiles.length - 1; j > 0; j--) {
for (int i = 0; i < j; i++) {
if (tiles[i].isEmpty()&& !tiles[i+1].isEmpty()) {
tiles[i].value = tiles[i + 1].value;
tiles[i + 1].value = 0;
//tiles[i+1] = new Tile();
x = true;
}
}
}
//mergeTiles(tiles);
return x;
}
private boolean mergeTiles(Tile[] tiles) {
boolean x = false;
for (int i = 1; i < tiles.length; i++) {
if (tiles[i - 1].value == tiles[i].value && !tiles[i-1].isEmpty() && !tiles[i].isEmpty()) {
tiles[i - 1].value *= 2;
tiles[i].value = 0;
//tiles[i] = new Tile();
if (tiles[i - 1].value > maxTile) {
maxTile = tiles[i - 1].value;
}
score += tiles[i - 1].value;
x = true;
/*i+=1;
for (; i <tiles.length-1 ; i++) {
tiles[i].value = tiles[i+1].value;
}
tiles[tiles.length-1].value = 0;*/
}
}
//boolean y = compressTiles(tiles);
return x;
}
public void left() {
boolean isChanged = false;
for (int i = 0; i < FIELD_WIDTH; i++) {
if ( mergeTiles(gameTiles[i]) | compressTiles(gameTiles[i])) {
isChanged = true;
}
}
if (isChanged) {
addTile();
}
}
/*public static void print(Tile[][] tiles) {
for (int i = 0; i < tiles.length; i++) {
for (int j = 0; j < tiles[i].length; j++) {
System.out.print(tiles[i][j].value + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
gameTiles = new Tile[][]{{new Tile(4), new Tile(2), new Tile(8), new Tile(4)},
{new Tile(4), new Tile(8), new Tile(2), new Tile(4)},
{new Tile(16), new Tile(16), new Tile(4), new Tile(2)},
{new Tile(2), new Tile(4), new Tile(8), new Tile(2)}};
print(gameTiles);
Model model = new Model();
//model.compressTiles(tiles);
//model.mergeTiles(tiles);
model.left();
print(gameTiles);
//model.compressTiles(tiles);
//print(tiles);
//model.mergeTiles(tiles);
//print(tiles);
//model.mergeTiles(tiles);
//print(tiles);
}*/