用java写一段扫雷游戏代码
时间: 2023-10-30 10:06:35 浏览: 38
以下是一个简单的Java扫雷游戏代码示例:
```java
import java.util.Random;
import java.util.Scanner;
public class Minesweeper {
private int[][] board;
private boolean[][] revealed;
private int size;
private int numOfMines;
public Minesweeper(int size, int numOfMines) {
this.size = size;
this.numOfMines = numOfMines;
board = new int[size][size];
revealed = new boolean[size][size];
initializeBoard();
}
private void initializeBoard() {
Random rand = new Random();
int count = 0;
while (count < numOfMines) {
int row = rand.nextInt(size);
int col = rand.nextInt(size);
if (board[row][col] != -1) {
board[row][col] = -1;
count++;
}
}
for (int r = 0; r < size; r++) {
for (int c = 0; c < size; c++) {
if (board[r][c] != -1) {
int countMines = countMinesAround(r, c);
board[r][c] = countMines;
}
}
}
}
private int countMinesAround(int row, int col) {
int count = 0;
for (int r = row - 1; r <= row + 1; r++) {
for (int c = col - 1; c <= col + 1; c++) {
if (r >= 0 && r < size && c >= 0 && c < size) {
if (board[r][c] == -1) {
count++;
}
}
}
}
return count;
}
public void play() {
Scanner scanner = new Scanner(System.in);
while (true) {
printBoard();
System.out.print("Enter row and column (e.g. 2 3): ");
int row = scanner.nextInt() - 1;
int col = scanner.nextInt() - 1;
if (isMine(row, col)) {
System.out.println("Game over!");
return;
}
reveal(row, col);
if (isWin()) {
System.out.println("You win!");
return;
}
}
}
private void reveal(int row, int col) {
if (row < 0 || row >= size || col < 0 || col >= size) {
return;
}
if (revealed[row][col]) {
return;
}
revealed[row][col] = true;
if (board[row][col] == 0) {
for (int r = row - 1; r <= row + 1; r++) {
for (int c = col - 1; c <= col + 1; c++) {
reveal(r, c);
}
}
}
}
private boolean isMine(int row, int col) {
return board[row][col] == -1;
}
private boolean isWin() {
for (int r = 0; r < size; r++) {
for (int c = 0; c < size; c++) {
if (!revealed[r][c] && board[r][c] != -1) {
return false;
}
}
}
return true;
}
private void printBoard() {
System.out.print(" ");
for (int c = 0; c < size; c++) {
System.out.print((c + 1) + " ");
}
System.out.println();
for (int r = 0; r < size; r++) {
System.out.print((r + 1) + " ");
for (int c = 0; c < size; c++) {
if (revealed[r][c]) {
if (board[r][c] == -1) {
System.out.print("* ");
} else {
System.out.print(board[r][c] + " ");
}
} else {
System.out.print(". ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
Minesweeper game = new Minesweeper(10, 10);
game.play();
}
}
```
这个示例代码实现了一个简单的扫雷游戏,玩家可以通过在控制台输入行和列来选择一个方格进行揭示。当揭示到地雷时,游戏结束;当所有非地雷方格都被揭示时,玩家获胜。