Hi team, I've just completed step 15 of the Minesweeper project successfully, moved into step 16 being very pleased with myself seeing that the game is complete and it appears that a bunch of code has been removed / updated when moving from step 15 to 16. The game isn't functioning as it should. I've attached the code that appeared in step 16. For example. Tiles aren't turning GREEN when they should. I'm wondering if I can just reload step 15 and complete it again but I've already mistakenly wiped the project once before and had to start from scratch. Has anyone else had this happen to them?
package com.codegym.games.minesweeper;

public class GameObject {
    public int x;
    public int y;
    public boolean isMine;
    public int countMineNeighbors;
    public boolean isOpen;
    public boolean isFlag;

    public GameObject(int x, int y, boolean isMine) {
        this.x = x;
        this.y = y;
        this.isMine = isMine;
    }
}
package com.codegym.games.minesweeper;

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;

import javax.print.attribute.standard.Sides;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MinesweeperGame extends Game {
    private static final int SIDE = 9;
    private GameObject[][] gameField = new GameObject[SIDE][SIDE];
    private int countMinesOnField;
    private static final String MINE = "\uD83D\uDCA3";
    private static final String FLAG = "\uD83D\uDEA9";
    private int countFlags;
    private boolean isGameStopped;
    private int countClosedTiles = SIDE * SIDE;
    private int score;

    @Override
    public void initialize() {
        setScreenSize(SIDE, SIDE);
        createGame();
    }

    private void createGame() {
        for (int y = 0; y < SIDE; y++) {
            for (int x = 0; x < SIDE; x++) {
                setCellValue(x , y, "");
                boolean isMine = getRandomNumber(10) < 1;
                if (isMine) {
                    countMinesOnField++;
                }
                gameField[y][x] = new GameObject(x, y, isMine);
                setCellColor(x, y, Color.ORANGE);
            }
        }
        countMineNeighbors();
        countFlags = countMinesOnField;
    }

    private List<GameObject> getNeighbors(GameObject gameObject) {
        List<GameObject> result = new ArrayList<>();
        for (int y = gameObject.y - 1; y <= gameObject.y + 1; y++) {
            for (int x = gameObject.x - 1; x <= gameObject.x + 1; x++) {
                if (y < 0 || y >= SIDE) {
                    continue;
                }
                if (x < 0 || x >= SIDE) {
                    continue;
                }
                if (gameField[y][x] == gameObject) {
                    continue;
                }
                result.add(gameField[y][x]);
            }
        }
        return result;
    }

    private void countMineNeighbors() {
        for (int y = 0; y < SIDE; y++) {
            for (int x = 0; x < SIDE; x++) {
                if (!gameField[y][x].isMine) {
                    for (GameObject neighbor : getNeighbors(gameField[y][x])) {
                        if (neighbor.isMine) {
                            gameField[y][x].countMineNeighbors++;
                        }
                    }
                }
            }
        }
    }

    private void openTile(int x, int y) {

        if (countClosedTiles == countMinesOnField && !gameField[y][x].isMine) {
            win();
        }
        else if (!gameField[y][x].isOpen && !gameField[y][x].isFlag && !isGameStopped) {
            countClosedTiles--;
            if (gameField[y][x].isMine) {
                setCellValueEx(x, y, Color.RED, MINE);
                gameOver();
            }
            else if (!gameField[y][x].isMine && gameField[y][x].countMineNeighbors == 0) {
                setCellValue(x, y, "");
                gameField[y][x].isOpen = true;
                score += 5;
                setScore(score);
                for (GameObject neighbors : getNeighbors(gameField[y][x])) {
                    if (!neighbors.isOpen) {
                        openTile(neighbors.x, neighbors.y);
                    }
                }
            }
            else if (!gameField[y][x].isMine && gameField[y][x].countMineNeighbors > 0) {
                gameField[y][x].isOpen = true;
                score += 5;
                setScore(score);
                setCellNumber(x, y, gameField[y][x].countMineNeighbors);
            }
        }
        if (countClosedTiles == countMinesOnField && gameField[y][x].isMine) {
            win();
        }
    }

    public void onMouseLeftClick(int x, int y) {
        if (isGameStopped) {
            restart();
        }
        else openTile(x, y);
    }

    public void onMouseRightClick(int x, int y) {
        markTile(x, y);
    }

    private void markTile(int x, int y) {
        if (!isGameStopped && !gameField[y][x].isOpen && countFlags > 0 && !gameField[y][x].isFlag) {
            gameField[y][x].isFlag = true;
            countFlags--;
            setCellValue(x, y, FLAG);
            setCellColor(x, y, Color.YELLOW);
        }
        else if (!isGameStopped && !gameField[y][x].isOpen && countFlags > 0 && gameField[y][x].isFlag) {
            gameField[y][x].isFlag = false;
            countFlags++;
            setCellValue(x, y, "");
            setCellColor(x, y, Color.ORANGE);
        }
    }

    private void gameOver() {
        isGameStopped = true;
        showMessageDialog(Color.RED, "YOU SUCK AT THIS!", Color.BLACK, 42);
    }

    private void win() {
        isGameStopped = true;
        showMessageDialog(Color.ANTIQUEWHITE, "WINNERS ARE GRINNERS", Color.BLACK, 42);
    }

    private void restart() {
        isGameStopped = false;
        countClosedTiles = SIDE * SIDE;
        score = 0;
        countMinesOnField = 0;
        setScore(score);
        createGame();
    }
}