C# Windows Forms 扫雷游戏源码实现

拾柒
拾柒
发布时间:2026-10-16| 6人浏览过
原创

本文通过完整的 C# Windows Forms 项目,展示了经典扫雷游戏的开发过程。内容涵盖了从界面布局构建、难度参数配置到核心逻辑如随机布雷、数字揭示以及递归式空白区域展开的详细代码实现。

项目目标与基础设置

本实验旨在掌握 C# 窗体应用程序的基本控件使用及事件处理。系统需支持三种标准难度模式,并实现经典的鼠标交互规则:左键点击揭开格子,右键循环切换标记(旗帜、问号、无标记)。

第1步:定义窗体属性与全局变量

在 Form1 类中声明控制游戏状态的关键变量,包括二维数组用于存储雷区数据 (MileState) 和按钮控件数组 (buttonarray),同时初始化窗口尺寸常量。

Button[,] buttonarray;
int[,] MileState; // -1表示雷,0-8表示周围雷数
int Miles = 10;   // 总雷数
int widths = 9, heights = 9; // 网格宽高
int remain;       // 剩余未标记雷数
int notMiles;     // 剩余安全格数

第2步:初始化菜单栏与主界面

通过代码动态创建菜单条,添加“开始”(含难度选项)、“帮助”及“退出”菜单项,并在顶部居中放置表情图标按钮作为重新开始入口。

// 创建菜单结构
MenuStrip ms = new MenuStrip();
ToolStripMenuItem tsmione = new ToolStripMenuItem("开始");
toolStripMenuItem[] levels = new ToolStripMenuItem[4];
levels[0] = new ToolStripMenuItem("初级");
levels[1] = new ToolStripMenuItem("中级");
levels[2] = new ToolStripMenuItem("高级");
// 注册各难度按钮的点击事件...

核心游戏逻辑实现

第3步:初始化雷区与动态渲染

根据选定的难度更新窗口大小、行列数及总雷数。随后通过嵌套循环实例化 Button 对象,将其放置在指定坐标并绑定 MouseDown 事件监听器。

  1. 重置参数:根据难度设定 widths、heights 和 Miles。
  2. 创建控件:遍历网格创建按钮,设置固定宽度和高度,统一添加到 Form。
  3. 位置计算:笑脸按钮的位置根据第一排按钮的跨度进行自动居中。

第4步:随机布雷与数字预计算

布雷过程需要在确定网格范围后随机填充。为确保效率,直接采用暴力法在已知雷格子的相邻8个位置递增数值,从而得到每个非雷格周围的雷数。

while (count < Miles) {
    int x = r.Next(heights);
    int y = r.Next(widths);
    if (MileState[x, y] != -1) {
        MileState[x, y] = -1; // 标记为雷
        count++;
        // 对周围的8个邻居进行边界检查并增加计数...
    }
}

第5步:鼠标交互与胜利判定

在 but_MouseDown 事件中处理左键和右键逻辑:

  • 左键点击 (LMB):若踩雷 (MileState == -1) 则触发失败;若点击空白区域 (== 0) 调用递归函数展开;若点击数字格,仅显示当前数字。
  • 右键点击 (RMB):循环修改文本状态:"" → "×"(旗帜) → "?"(问号) → ""。当所有雷均被正确标记时提示胜利。

第6步:递归展开空白区域 (Flood Fill)

当用户点击到一个周围雷数为0的格子时,程序需自动将其周围所有未揭开的区域一并翻开。这是实现“一触开一片”效果的核心,使用深度优先搜索 (DFS) 完成。

private void print(int x, int y, int[,] sign) {
    // 标记已访问
    sign[x, y] = 1;
    notMiles--;
    
    // 向上下左右及对角线方向递归探索
    // 如果邻居也是空白(0),继续深入print()
    // 如果邻居是数字(>0),仅揭开该邻居不再向下递归
}

运行结果与测试

编译并运行生成的 .exe 文件,即可体验以下功能:

  • 界面展示:不同难度对应不同的面板大小,初始为灰色方格矩阵。
  • 交互反馈:翻开后的数字格背景色有所区分,成功标记雷区可观察到计数器归零。
  • 胜负判定:点中地雷立即显示哭脸图标并全盘揭秘;全部安全点开或标记完毕则弹出胜利消息框。

以上就是C#实现扫雷游戏代码逻辑与功能的详细内容,更多关于C#桌面小游戏开发的技巧资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。