Метод 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);
    }


}