Minesweeper.java
· 3.7 KiB · Java
Brut
import java.util.Random;
import java.util.Scanner;
public class Minesweeper {
private static final int SIZE = 10;
private static final int MINES = 15;
private char[][] board;
private boolean[][] mines;
private boolean[][] revealed;
private boolean gameOver;
public Minesweeper() {
board = new char[SIZE][SIZE];
mines = new boolean[SIZE][SIZE];
revealed = new boolean[SIZE][SIZE];
gameOver = false;
}
public void initialize() {
// Initialize the board and randomly place mines
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
board[i][j] = ' ';
mines[i][j] = false;
revealed[i][j] = false;
}
}
placeMines();
}
public void placeMines() {
Random random = new Random();
int minesPlaced = 0;
while (minesPlaced < MINES) {
int x = random.nextInt(SIZE);
int y = random.nextInt(SIZE);
if (!mines[x][y]) {
mines[x][y] = true;
minesPlaced++;
}
}
}
public void printBoard() {
System.out.println("Minesweeper");
System.out.print(" ");
for (int i = 0; i < SIZE; i++) {
System.out.print(i + " ");
}
System.out.println();
for (int i = 0; i < SIZE; i++) {
System.out.print(i + ": ");
for (int j = 0; j < SIZE; j++) {
char cell = revealed[i][j] ? board[i][j] : ' ';
System.out.print(cell + " ");
}
System.out.println();
}
}
public void revealCell(int x, int y) {
if (x < 0 || x >= SIZE || y < 0 || y >= SIZE || revealed[x][y] || gameOver) {
return;
}
if (mines[x][y]) {
gameOver = true;
return;
}
revealed[x][y] = true;
int count = countMinesAround(x, y);
if (count > 0) {
board[x][y] = (char) (count + '0');
} else {
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
revealCell(x + i, y + j);
}
}
}
}
public int countMinesAround(int x, int y) {
int count = 0;
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
int nx = x + i;
int ny = y + j;
if (nx >= 0 && nx < SIZE && ny >= 0 && ny < SIZE && mines[nx][ny]) {
count++;
}
}
}
return count;
}
public boolean isGameOver() {
return gameOver;
}
public boolean isGameWon() {
int unrevealedCells = 0;
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (!revealed[i][j]) {
unrevealedCells++;
}
}
}
return unrevealedCells == MINES;
}
public static void main(String[] args) {
Minesweeper game = new Minesweeper();
game.initialize();
Scanner scanner = new Scanner(System.in);
while (!game.isGameOver() && !game.isGameWon()) {
game.printBoard();
System.out.print("Enter row and column (e.g., '1 2'): ");
int x = scanner.nextInt();
int y = scanner.nextInt();
game.revealCell(x, y);
}
game.printBoard();
if (game.isGameWon()) {
System.out.println("You won! Congratulations!");
} else {
System.out.println("Game over! You hit a mine!");
}
scanner.close();
}
}
1 | import java.util.Random; |
2 | import java.util.Scanner; |
3 | |
4 | public class Minesweeper { |
5 | private static final int SIZE = 10; |
6 | private static final int MINES = 15; |
7 | |
8 | private char[][] board; |
9 | private boolean[][] mines; |
10 | private boolean[][] revealed; |
11 | private boolean gameOver; |
12 | |
13 | public Minesweeper() { |
14 | board = new char[SIZE][SIZE]; |
15 | mines = new boolean[SIZE][SIZE]; |
16 | revealed = new boolean[SIZE][SIZE]; |
17 | gameOver = false; |
18 | } |
19 | |
20 | public void initialize() { |
21 | // Initialize the board and randomly place mines |
22 | for (int i = 0; i < SIZE; i++) { |
23 | for (int j = 0; j < SIZE; j++) { |
24 | board[i][j] = ' '; |
25 | mines[i][j] = false; |
26 | revealed[i][j] = false; |
27 | } |
28 | } |
29 | placeMines(); |
30 | } |
31 | |
32 | public void placeMines() { |
33 | Random random = new Random(); |
34 | int minesPlaced = 0; |
35 | |
36 | while (minesPlaced < MINES) { |
37 | int x = random.nextInt(SIZE); |
38 | int y = random.nextInt(SIZE); |
39 | |
40 | if (!mines[x][y]) { |
41 | mines[x][y] = true; |
42 | minesPlaced++; |
43 | } |
44 | } |
45 | } |
46 | |
47 | public void printBoard() { |
48 | System.out.println("Minesweeper"); |
49 | System.out.print(" "); |
50 | for (int i = 0; i < SIZE; i++) { |
51 | System.out.print(i + " "); |
52 | } |
53 | System.out.println(); |
54 | |
55 | for (int i = 0; i < SIZE; i++) { |
56 | System.out.print(i + ": "); |
57 | for (int j = 0; j < SIZE; j++) { |
58 | char cell = revealed[i][j] ? board[i][j] : ' '; |
59 | System.out.print(cell + " "); |
60 | } |
61 | System.out.println(); |
62 | } |
63 | } |
64 | |
65 | public void revealCell(int x, int y) { |
66 | if (x < 0 || x >= SIZE || y < 0 || y >= SIZE || revealed[x][y] || gameOver) { |
67 | return; |
68 | } |
69 | |
70 | if (mines[x][y]) { |
71 | gameOver = true; |
72 | return; |
73 | } |
74 | |
75 | revealed[x][y] = true; |
76 | int count = countMinesAround(x, y); |
77 | if (count > 0) { |
78 | board[x][y] = (char) (count + '0'); |
79 | } else { |
80 | for (int i = -1; i <= 1; i++) { |
81 | for (int j = -1; j <= 1; j++) { |
82 | revealCell(x + i, y + j); |
83 | } |
84 | } |
85 | } |
86 | } |
87 | |
88 | public int countMinesAround(int x, int y) { |
89 | int count = 0; |
90 | |
91 | for (int i = -1; i <= 1; i++) { |
92 | for (int j = -1; j <= 1; j++) { |
93 | int nx = x + i; |
94 | int ny = y + j; |
95 | if (nx >= 0 && nx < SIZE && ny >= 0 && ny < SIZE && mines[nx][ny]) { |
96 | count++; |
97 | } |
98 | } |
99 | } |
100 | |
101 | return count; |
102 | } |
103 | |
104 | public boolean isGameOver() { |
105 | return gameOver; |
106 | } |
107 | |
108 | public boolean isGameWon() { |
109 | int unrevealedCells = 0; |
110 | for (int i = 0; i < SIZE; i++) { |
111 | for (int j = 0; j < SIZE; j++) { |
112 | if (!revealed[i][j]) { |
113 | unrevealedCells++; |
114 | } |
115 | } |
116 | } |
117 | return unrevealedCells == MINES; |
118 | } |
119 | |
120 | public static void main(String[] args) { |
121 | Minesweeper game = new Minesweeper(); |
122 | game.initialize(); |
123 | |
124 | Scanner scanner = new Scanner(System.in); |
125 | |
126 | while (!game.isGameOver() && !game.isGameWon()) { |
127 | game.printBoard(); |
128 | System.out.print("Enter row and column (e.g., '1 2'): "); |
129 | int x = scanner.nextInt(); |
130 | int y = scanner.nextInt(); |
131 | game.revealCell(x, y); |
132 | } |
133 | |
134 | game.printBoard(); |
135 | if (game.isGameWon()) { |
136 | System.out.println("You won! Congratulations!"); |
137 | } else { |
138 | System.out.println("Game over! You hit a mine!"); |
139 | } |
140 | |
141 | scanner.close(); |
142 | } |
143 | } |
144 |