class MineModel { int rows, cols, numMines; MineGrid grid; boolean won = false; MineModel(int rows, int cols, int numMines) { this.rows = rows; this.cols = cols; grid = new MineGrid(rows, cols); grid.populateGrid(numMines); } void reset() { grid = new MineGrid(rows, cols); grid.populateGrid(numMines); } void toggleSquare(int row, int col) { grid.grid[row][col].toggleMark(); } boolean openSquare(int row, int col) { if (grid.grid[row][col].open()) return true; if (grid.grid[row][col].neighbourMines == 0) { for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { if (i == 0 && j == 0) continue; if (checkCoords(row + i, col + j) && grid.grid[row + i][col + j].status == 0) { openSquare(row + i, col + j); } } } } return false; } boolean checkCoords(int row, int col) { return grid.checkCoords(row, col); } boolean checkIfWon() { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { MineSquare ms = grid.grid[i][j]; if (!ms.isMine && ms.status == 0) return false; } } return true; } @Override public String toString() { return grid.toString(); } }