Initializing mines after first touch
This commit is contained in:
parent
e092f43fb5
commit
e94376468c
@ -38,6 +38,7 @@ public class Board extends JPanel {
|
|||||||
private int mines, activeTiles, flaggedTiles;
|
private int mines, activeTiles, flaggedTiles;
|
||||||
private Tile[][] board;
|
private Tile[][] board;
|
||||||
private BoardConfig boardConfig;
|
private BoardConfig boardConfig;
|
||||||
|
private boolean minesPlaced;
|
||||||
|
|
||||||
private Instant start, finish;
|
private Instant start, finish;
|
||||||
|
|
||||||
@ -86,6 +87,7 @@ public class Board extends JPanel {
|
|||||||
mines = config.mines;
|
mines = config.mines;
|
||||||
activeTiles = boardWidth * boardHeight;
|
activeTiles = boardWidth * boardHeight;
|
||||||
flaggedTiles = 0;
|
flaggedTiles = 0;
|
||||||
|
minesPlaced = false;
|
||||||
|
|
||||||
notifyFlaggedTilesEvent(new FlaggedTilesEvent(this, flaggedTiles));
|
notifyFlaggedTilesEvent(new FlaggedTilesEvent(this, flaggedTiles));
|
||||||
|
|
||||||
@ -94,7 +96,6 @@ public class Board extends JPanel {
|
|||||||
for (int i = 0; i < boardWidth; i++)
|
for (int i = 0; i < boardWidth; i++)
|
||||||
for (int j = 0; j < boardHeight; j++)
|
for (int j = 0; j < boardHeight; j++)
|
||||||
board[i][j] = new Tile();
|
board[i][j] = new Tile();
|
||||||
initMines();
|
|
||||||
repaint();
|
repaint();
|
||||||
revalidate();
|
revalidate();
|
||||||
|
|
||||||
@ -176,7 +177,7 @@ public class Board extends JPanel {
|
|||||||
int m = random.nextInt(boardHeight);
|
int m = random.nextInt(boardHeight);
|
||||||
|
|
||||||
// Check if the selected tile already is a mine and is not touched
|
// Check if the selected tile already is a mine and is not touched
|
||||||
if (!board[n][m].isMine()) {
|
if (!board[n][m].isTouched() && !board[n][m].isMine()) {
|
||||||
// Decrement the counter
|
// Decrement the counter
|
||||||
remaining--;
|
remaining--;
|
||||||
|
|
||||||
@ -189,6 +190,7 @@ public class Board extends JPanel {
|
|||||||
board[i][j].setSurroundingMines(board[i][j].getSurroundingMines() + 1);
|
board[i][j].setSurroundingMines(board[i][j].getSurroundingMines() + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
minesPlaced = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void touchTile(int n, int m) {
|
private void touchTile(int n, int m) {
|
||||||
@ -214,8 +216,11 @@ public class Board extends JPanel {
|
|||||||
onGameOver();
|
onGameOver();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Place the mines if this was the first touch
|
||||||
|
if (!minesPlaced) initMines();
|
||||||
|
|
||||||
// Touch surrounding tiles when there are zero surrounding mines
|
// Touch surrounding tiles when there are zero surrounding mines
|
||||||
else if (tile.getSurroundingMines() == 0)
|
if (tile.getSurroundingMines() == 0)
|
||||||
for (int i = Math.max(0, n - 1); i < Math.min(n + 2, board.length); i++)
|
for (int i = Math.max(0, n - 1); i < Math.min(n + 2, board.length); i++)
|
||||||
for (int j = Math.max(0, m - 1); j < Math.min(m + 2, board[i].length); j++)
|
for (int j = Math.max(0, m - 1); j < Math.min(m + 2, board[i].length); j++)
|
||||||
if (i != n || j != m) touchTile(i, j);
|
if (i != n || j != m) touchTile(i, j);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user