Última actividad 1718984273

Revisión d79105505f87a3b6d503fc49c111428df4cd0357

Minesweeper.java Sin formato
1import java.util.Random;
2import java.util.Scanner;
3
4public 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