Java如何实现扫雷
实现扫雷游戏的基本思路
扫雷游戏的核心逻辑包括生成地雷、计算周围地雷数、处理用户点击以及判断游戏胜负。以下是实现扫雷的关键步骤。
游戏初始化
创建一个二维数组表示游戏棋盘,初始化时所有格子为未打开状态。随机生成指定数量的地雷位置,确保不重复。
int[][] board = new int[rows][cols];
boolean[][] mines = new boolean[rows][cols];
Random random = new Random();
for (int i = 0; i < mineCount; i++) {
int x = random.nextInt(rows);
int y = random.nextInt(cols);
if (!mines[x][y]) {
mines[x][y] = true;
} else {
i--; // 重新生成
}
}
计算周围地雷数量
遍历每个非地雷格子,统计周围8个方向的地雷数量,将结果存入棋盘数组。

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (!mines[i][j]) {
int count = 0;
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
int nx = i + dx, ny = j + dy;
if (nx >= 0 && nx < rows && ny >= 0 && ny < cols && mines[nx][ny]) {
count++;
}
}
}
board[i][j] = count;
}
}
}
处理用户点击
当用户点击格子时,如果是地雷则游戏结束。如果是空白格子(周围无地雷),则递归展开相邻空白区域。
void reveal(int x, int y) {
if (x < 0 || x >= rows || y < 0 || y >= cols || revealed[x][y]) {
return;
}
revealed[x][y] = true;
if (mines[x][y]) {
gameOver();
return;
}
if (board[x][y] == 0) {
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
reveal(x + dx, y + dy);
}
}
}
}
判断游戏胜负
检查所有非地雷格子是否均已揭开,或者标记的地雷数量与实际一致。

boolean checkWin() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (!mines[i][j] && !revealed[i][j]) {
return false;
}
}
}
return true;
}
图形界面实现
使用Java Swing创建图形界面,绘制棋盘和处理鼠标事件。
JFrame frame = new JFrame("Minesweeper");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 绘制棋盘逻辑
}
};
panel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX() / cellSize;
int y = e.getY() / cellSize;
if (e.getButton() == MouseEvent.BUTTON1) {
reveal(x, y);
} else if (e.getButton() == MouseEvent.BUTTON3) {
flag(x, y); // 标记地雷
}
panel.repaint();
}
});
frame.add(panel);
frame.setVisible(true);
完整游戏流程
初始化游戏后进入主循环,等待用户操作。每次操作后更新界面并检查游戏状态,直到游戏结束。
while (!gameOver && !gameWon) {
// 等待用户输入
if (checkWin()) {
gameWon = true;
showWinMessage();
}
}
以上代码片段展示了Java实现扫雷游戏的核心逻辑,可根据需求进一步扩展功能如难度选择、计时器等。






