java实现扫雷游戏(附源码)

实现一个扫雷小游戏需要一些编程知识和图形界面库,Java中可以使用Swing来创建图形界面。以下是一个简单的扫雷小游戏的Java代码示例,该示例使用Swing库:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MineSweeperGame {
    public static void main(String[] args) {
        JFrame frame = new JFrame("扫雷游戏");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);

        JPanel panel = new JPanel(new GridLayout(10, 10));
        JButton[][] buttons = new JButton[10][10];

        // 创建并初始化扫雷地图
        boolean[][] mines = generateMines(10, 10, 10);

        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                buttons[i][j] = new JButton();
                int finalI = i;
                int finalJ = j;
                buttons[i][j].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if (mines[finalI][finalJ]) {
                            buttons[finalI][finalJ].setText("X");
                        } else {
                            int count = countAdjacentMines(mines, finalI, finalJ);
                            buttons[finalI][finalJ].setText(count > 0 ? String.valueOf(count) : "");
                        }
                        buttons[finalI][finalJ].setEnabled(false);
                    }
                });
                panel.add(buttons[i][j]);
            }
        }

        frame.add(panel);
        frame.setVisible(true);
    }

    // 生成扫雷地图,其中minesCount是地雷数量
    private static boolean[][] generateMines(int rows, int cols, int minesCount) {
        boolean[][] mines = new boolean[rows][cols];
        int count = 0;
        while (count < minesCount) {
            int x = (int) (Math.random() * rows);
            int y = (int) (Math.random() * cols);
            if (!mines[x][y]) {
                mines[x][y] = true;
                count++;
            }
        }
        return mines;
    }

    // 计算某个格子周围的地雷数量
    private static int countAdjacentMines(boolean[][] mines, int x, int y) {
        int count = 0;
        for (int i = -1; i <= 1; i++) {
            for (int j = -1; j <= 1; j++) {
                int newX = x + i;
                int newY = y + j;
                if (newX >= 0 && newX < mines.length && newY >= 0 && newY < mines[0].length) {
                    if (mines[newX][newY]) {
                        count++;
                    }
                }
            }
        }
        return count;
    }
}

这个示例创建了一个简单的10x10的扫雷游戏界面,当点击方块时,会根据周围的地雷数量显示数字或地雷标志。你可以根据需要扩展该示例,添加更多功能和改进用户体验。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是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(); } } ``` 这个程序实现了一个简单的扫雷游戏,可以自定义面板大小和雷的数量。玩家每次输入要揭示的位置,程序会判断该位置是否是雷,如果是雷则游戏结束,否则会递归揭示周围的位置直到所有不是雷的位置都被揭示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值