JAVA 编写一个扫雷游戏
时间: 2024-05-10 13:14:50 浏览: 6
好的,下面是一个简单的扫雷游戏的 JAVA 代码示例:
```java
import java.util.Random;
import java.util.Scanner;
public class Minesweeper {
private int[][] board; // 扫雷游戏的棋盘
private int[][] mines; // 扫雷游戏的雷区
private int size; // 扫雷游戏的棋盘大小
private int numOfMines; // 扫雷游戏的雷数
private int numOfCovered; // 扫雷游戏的未开放的方块数
// 初始化函数,用于创建扫雷游戏的棋盘
public void init() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入棋盘大小:");
size = scanner.nextInt();
board = new int[size][size];
mines = new int[size][size];
numOfCovered = size * size;
System.out.print("请输入雷数:");
numOfMines = scanner.nextInt();
if (numOfMines >= size * size) {
System.out.println("雷数不能超过棋盘大小!");
System.exit(0);
}
placeMines(numOfMines);
}
// 随机放置雷
private void placeMines(int numOfMines) {
Random random = new Random();
int count = 0;
while (count < numOfMines) {
int x = random.nextInt(size);
int y = random.nextInt(size);
if (mines[x][y] == 0) {
mines[x][y] = 1;
count++;
}
}
}
// 显示棋盘
public void displayBoard() {
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 (board[i][j] == 0) {
System.out.print("- ");
} else if (board[i][j] == 1) {
System.out.print("* ");
} else {
System.out.print(board[i][j] + " ");
}
}
System.out.println();
}
}
// 开放指定位置的方块
public void openBlock(int x, int y) {
if (mines[x][y] == 1) { // 如果该位置是雷,游戏结束
board[x][y] = 1;
displayBoard();
System.out.println("游戏结束!");
System.exit(0);
}
int count = countMines(x, y); // 计算该位置周围的雷数
board[x][y] = count;
numOfCovered--;
if (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] == 0) {
openBlock(i, j);
}
}
}
}
if (numOfCovered == numOfMines) { // 如果所有未开放的方块都是雷,游戏胜利
displayBoard();
System.out.println("恭喜,游戏胜利!");
System.exit(0);
}
}
// 计算指定位置周围的雷数
private int countMines(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 && mines[i][j] == 1) {
count++;
}
}
}
return count;
}
public static void main(String[] args) {
Minesweeper game = new Minesweeper();
game.init();
game.displayBoard();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("请输入坐标(x,y):");
String[] input = scanner.nextLine().split(",");
int x = Integer.parseInt(input[0]);
int y = Integer.parseInt(input[1]);
game.openBlock(x, y);
game.displayBoard();
}
}
}
```
该扫雷游戏的实现比较简单,主要包括以下几个步骤:
1. 创建扫雷游戏的棋盘,包括棋盘大小和雷数。
2. 随机放置雷。
3. 显示棋盘,初始状态下所有方块都是未开放的。
4. 玩家输入坐标,开放指定位置的方块。
5. 计算该位置周围的雷数,如果该位置周围没有雷,则递归开放周围的方块。
6. 如果该位置是雷,游戏结束;如果所有未开放的方块都是雷,游戏胜利。