返回

敲开回忆的闸门,用Java畅游扫雷世界

后端

周末的时光总是闲暇而慵懒,仿佛置身于宁静的港湾,少了几分都市的喧嚣与烦躁。漫步在记忆的长廊中,我突然想起儿时沉迷于扫雷游戏的时光,指尖在电脑键盘上飞舞,在方块阵中步步为营,挖掘深藏的秘密。于是,我决定用Java语言编写一款扫雷程序,让这份怀旧的情怀在代码的海洋中重焕生机。

// 引入必要的Java库
import java.util.Random;
import java.util.Scanner;

public class Java扫雷游戏 {
    // 游戏变量
    private static final int 格子数量 = 10;
    private static final int 雷的数量 = 10;
    private static char[][] 棋盘;
    private static boolean[][] 已知雷区;
    private static int 未知雷区数量;

    public static void main(String[] args) {
        // 初始化游戏
        初始化棋盘();
        设置雷区();
        计算相邻雷区数量();

        // 玩家交互
        Scanner scanner = new Scanner(System.in);
        while (未知雷区数量 > 0) {
            // 显示棋盘
            System.out.println("当前棋盘:");
            显示棋盘();

            // 获取玩家输入
            System.out.print("请输入坐标(行, 列): ");
            String 输入坐标 = scanner.nextLine();
            int 行 = Integer.parseInt(输入坐标.split(",")[0]);
            int 列 = Integer.parseInt(输入坐标.split(",")[1]);

            // 处理玩家输入
            处理玩家输入(行, 列);
        }

        // 结束游戏
        if (未知雷区数量 == 0) {
            System.out.println("恭喜您,您成功通关了!");
        } else {
            System.out.println("很遗憾,您踩到了雷,游戏结束!");
        }
    }

    // 初始化棋盘
    private static void 初始化棋盘() {
        棋盘 = new char[格子数量][格子数量];
        已知雷区 = new boolean[格子数量][格子数量];
        未知雷区数量 = 格子数量 * 格子数量;

        // 初始化棋盘为未知状态
        for (int i = 0; i < 格子数量; i++) {
            for (int j = 0; j < 格子数量; j++) {
                棋盘[i][j] = '?';
                已知雷区[i][j] = false;
            }
        }
    }

    // 设置雷区
    private static void 设置雷区() {
        Random 随机数生成器 = new Random();

        // 设置雷的数量
        for (int i = 0; i < 雷的数量; i++) {
            int 行 = 随机数生成器.nextInt(格子数量);
            int 列 = 随机数生成器.nextInt(格子数量);

            // 如果该位置已经设置了雷,则重新生成随机位置
            while (棋盘[行][列] == 'X') {
                行 = 随机数生成器.nextInt(格子数量);
                列 = 随机数生成器.nextInt(格子数量);
            }

            // 设置雷
            棋盘[行][列] = 'X';
        }
    }

    // 计算相邻雷区数量
    private static void 计算相邻雷区数量() {
        for (int i = 0; i < 格子数量; i++) {
            for (int j = 0; j < 格子数量; j++) {
                // 如果该位置是雷,则跳过
                if (棋盘[i][j] == 'X') {
                    continue;
                }

                // 计算相邻雷区数量
                int 相邻雷区数量 = 0;
                for (int ii = i - 1; ii <= i + 1; ii++) {
                    for (int jj = j - 1; jj <= j + 1; jj++) {
                        // 如果超出棋盘范围,则跳过
                        if (ii < 0 || ii >= 格子数量 || jj < 0 || jj >= 格子数量) {
                            continue;
                        }

                        // 如果相邻位置是雷,则增加相邻雷区数量
                        if (棋盘[ii][jj] == 'X') {
                            相邻雷区数量++;
                        }
                    }
                }

                // 将相邻雷区数量存储在棋盘中
                棋盘[i][j] = (char) (相邻雷区数量 + '0');
            }
        }
    }

    // 处理玩家输入
    private static void 处理玩家输入(int 行, int 列) {
        // 如果玩家输入的坐标超出棋盘范围,则忽略
        if (行 < 0 || 行 >= 格子数量 || 列 < 0 || 列 >= 格子数量) {
            System.out.println("输入的坐标超出棋盘范围,请重新输入!");
            return;
        }

        // 如果玩家输入的坐标是已知雷区,则忽略
        if (已知雷区[行][列]) {
            System.out.println("该位置已经