java实现扫雷游戏(附完整源码)
时间: 2023-11-11 14:04:18 浏览: 149
好的,下面是Java实现扫雷游戏的完整源码:
```java
import java.util.Random;
import java.util.Scanner;
public class MineSweeper {
private int[][] board; // 扫雷游戏面板
private boolean[][] revealed; // 记录位置是否被揭示
private int mines; // 雷的个数
private int size; // 面板大小
private boolean gameOver; // 游戏是否结束
public MineSweeper(int size, int mines) {
this.size = size;
this.mines = mines;
this.board = new int[size][size];
this.revealed = new boolean[size][size];
this.gameOver = false;
initBoard();
}
// 初始化面板,随机放置雷
private void initBoard() {
Random random = new Random();
int count = 0;
while (count < mines) {
int x = random.nextInt(size);
int y = random.nextInt(size);
if (board[x][y] != -1) { // 如果该位置不是雷,就放置雷
board[x][y] = -1;
count++;
}
}
}
// 显示游戏面板
private void displayBoard() {
System.out.println();
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++) {
if (revealed[i][j]) { // 如果该位置已经被揭示
if (board[i][j] == -1) { // 如果该位置是雷
System.out.print("* ");
} else { // 如果该位置不是雷
System.out.print(board[i][j] + " ");
}
} else { // 如果该位置还没有被揭示
System.out.print(". ");
}
}
System.out.println();
}
}
// 获取某个位置周围雷的数量
private int getSurroundingMines(int x, int y) {
int count = 0;
for (int i = x - 1; i <= x + 1; i++) {
for (int j = y - 1; j <= y + 1; j++) {
if (i >= 0 && i < size && j >= 0 && j < size && board[i][j] == -1) {
count++;
}
}
}
return count;
}
// 揭示某个位置
private void reveal(int x, int y) {
if (!revealed[x][y]) { // 如果该位置还没有被揭示
revealed[x][y] = true;
if (board[x][y] == -1) { // 如果该位置是雷,游戏结束
gameOver = true;
return;
}
if (getSurroundingMines(x, y) == 0) { // 如果该位置周围没有雷,递归揭示周围的位置
for (int i = x - 1; i <= x + 1; i++) {
for (int j = y - 1; j <= y + 1; j++) {
if (i >= 0 && i < size && j >= 0 && j < size) {
reveal(i, j);
}
}
}
}
}
}
// 运行游戏
public void run() {
Scanner scanner = new Scanner(System.in);
while (!gameOver) {
displayBoard();
System.out.print("请输入要揭示的位置(x y):");
int x = scanner.nextInt();
int y = scanner.nextInt();
if (x >= 0 && x < size && y >= 0 && y < size) { // 如果位置合法
reveal(x, y);
}
}
displayBoard();
System.out.println("游戏结束!");
}
public static void main(String[] args) {
MineSweeper game = new MineSweeper(10, 10); // 创建一个大小为10x10,雷数为10的扫雷游戏
game.run();
}
}
```
这个程序实现了一个简单的扫雷游戏,可以自定义面板大小和雷的数量。玩家每次输入要揭示的位置,程序会判断该位置是否是雷,如果是雷则游戏结束,否则会递归揭示周围的位置直到所有不是雷的位置都被揭示出来。
阅读全文