用java代码写一个扫雷游戏
时间: 2023-05-15 15:07:08 浏览: 61
好的,以下是一个简单的Java扫雷游戏的代码:
import java.util.Random;
import java.util.Scanner;
public class Minesweeper {
private int[][] board;
private boolean[][] revealed;
private int size;
private int numMines;
private boolean gameOver;
public Minesweeper(int size, int numMines) {
this.size = size;
this.numMines = numMines;
this.board = new int[size][size];
this.revealed = new boolean[size][size];
this.gameOver = false;
placeMines();
calculateNumbers();
}
private void placeMines() {
Random rand = new Random();
int count = 0;
while (count < numMines) {
int row = rand.nextInt(size);
int col = rand.nextInt(size);
if (board[row][col] != -1) {
board[row][col] = -1;
count++;
}
}
}
private void calculateNumbers() {
for (int row = 0; row < size; row++) {
for (int col = 0; col < size; col++) {
if (board[row][col] == -1) {
continue;
}
int count = 0;
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
int r = row + i;
int c = col + j;
if (r >= 0 && r < size && c >= 0 && c < size && board[r][c] == -1) {
count++;
}
}
}
board[row][col] = count;
}
}
}
public void play() {
Scanner scanner = new Scanner(System.in);
while (!gameOver) {
printBoard();
System.out.print("Enter row: ");
int row = scanner.nextInt();
System.out.print("Enter column: ");
int col = scanner.nextInt();
if (row < 0 || row >= size || col < 0 || col >= size) {
System.out.println("Invalid input!");
continue;
}
if (revealed[row][col]) {
System.out.println("Already revealed!");
continue;
}
revealCell(row, col);
checkGameOver();
}
printBoard();
System.out.println("Game over!");
}
private void revealCell(int row, int col) {
revealed[row][col] = true;
if (board[row][col] == -1) {
gameOver = true;
return;
}
if (board[row][col] == 0) {
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
int r = row + i;
int c = col + j;
if (r >= 0 && r < size && c >= 0 && c < size && !revealed[r][c]) {
revealCell(r, c);
}
}
}
}
}
private void checkGameOver() {
for (int row = 0; row < size; row++) {
for (int col = 0; col < size; col++) {
if (!revealed[row][col] && board[row][col] != -1) {
return;
}
}
}
gameOver = true;
}
private void printBoard() {
System.out.print(" ");
for (int col = 0; col < size; col++) {
System.out.print(col + " ");
}
System.out.println();
for (int row = 0; row < size; row++) {
System.out.print(row + " ");
for (int col = 0; col < size; col++) {
if (revealed[row][col]) {
if (board[row][col] == -1) {
System.out.print("* ");
} else {
System.out.print(board[row][col] + " ");
}
} else {
System.out.print(". ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
Minesweeper game = new Minesweeper(10, 10);
game.play();
}
}