
目录1. 扫雷游戏的分析与设计1. 扫雷游戏的功能说明2. 游戏的分析与设计1. 游戏菜单的设计2. 游戏棋盘的设计2. 游戏的扩展前言扫雷是一款经典的益智小游戏规则简单却充满挑战玩家需要在不踩中地雷的前提下通过数字提示推理出所有安全格子。本文将以 C 语言为例从零开始带你一步步实现一个控制台版扫雷游戏。我们将按照「功能说明 → 分析与设计 → 代码实现 → 扩展思路」的顺序展开。在分析与设计阶段重点讲解如何用二维数组存储棋盘信息、如何解决数组越界问题、以及如何用两个数组分别管理「雷的分布」和「玩家排查结果」。在代码实现阶段会给出 game.h、game.c、test.c 三个文件的完整设计思路与关键代码并附上调试效果图。无论你是刚学完 C 语言基础、想通过小项目巩固知识的新手还是想了解如何把一个想法拆解成可落地代码的初学者这篇文章都适合你。读完本文你将能独立写出一个可运行的扫雷游戏并掌握模块化编程的基本思路。1. 扫雷游戏的分析与设计1.扫雷游戏的功能说明·使用控制台实现经典的扫雷游戏 解释控制台也就是我们常用到的命令提示符·游戏可以通过菜单来实现继续玩或退出游戏·扫雷的棋盘是9*9的格子·默认随机布置10个雷·可以排查雷有3种情况1如果位置不是雷就显示周围有几颗雷的信息2如果位置是雷则被炸死游戏结束3如果将除10个雷之外的所有非雷的位置排查出来则游戏胜利2.游戏的分析与设计1.游戏菜单的设计进入游戏首先我们会先看见游戏的一个主界面也就是主菜单让我们去选择继续玩或退出游戏通过以上描述在结合我们在猜数字游戏写的菜单就可以写出以下代码了首先我们先创建game.h、game.c、test.c 3个文件如下图游戏菜单的显示test.c纠错以上图片中菜单每句输出都少了换行显示游戏菜单后我们要进行选择继续玩或退出游戏test.c根据玩家的选择对应不同的情况继续玩、退出游戏、输入错误(test.c)2.游戏棋盘的设计扫雷过程中我们要对布置雷和非雷位置提供周围雷数量的信息进行存储为了在棋盘上存放信息我们首先会想到用99的二维数组对于布置雷的信息如果这个位置布置雷我们存放1不布置雷存放0对于非雷位置提供周围雷数量的信息假设我们排25访问周围一圈得到周围雷的数量为1假设我们排86访问周围一圈发现最下面的3个坐标发生了越界为了解决越界的问题我们是不是可以扩大以下访问的区域将棋盘周围扩大1圈但是雷的信息仍存放在99棋盘中扩大的1圈不去存放布置雷的信息所以我们创建了11*11的二维数组去存放信息我们继续分析在棋盘上布置雷雷为1非雷为0假如遇到这种情况排雷时排查到非雷的位置周围一圈的雷数量为1要将这个信息记录存放但是这个信息存放在哪呢若存放在布置雷的数组内则会与布置雷的信息发生混淆和打印上的困难。这时候我们可能会想到去改变布置雷的信息不使用数字用某种字符就行了虽然这样能解决冲突但是这样做棋盘上有雷和非雷的信息还有排查出的雷的个数信息就比较混杂不够方便。这里我们采取另一种方案使用2个二维数组一个数组用来存储布置雷的信息另一个数组用来存储排查雷的个数的信息。雷存放在mine数组内在mine数组内排查雷排查到的数据存放在show数组数组里面并打印show数组的信息帮助排雷游戏的进行。首先创建2个数组test.c为了保持神秘show数组初始化为’‘为了保持两个数组的类型一致可以使用同一套函数处理mine数组最开始也初始化为字符’0’布置雷改成’1’。如下如2个数组的初始化test.c初始化函数的声明game.h初始化函数的定义game.c要包含game.h的头文件我们做的是一个99的棋盘但是如果我们想要生成别的大小的棋盘我们要把全部关于棋盘大小的数据去进行修改操作很繁琐我们这时会想到用变量去控制棋盘大小改变变量就可以改变关于棋盘的所有数据创建改变棋盘大小的变量game.h修改各处代码均要包含头文件game.hgame.ctest.c在将棋盘初始化后我们想看一下初始化后棋盘的效果这时候我们就要去将棋盘打印在屏幕上去观察创建打印棋盘函数test.c打印棋盘函数的声明game.h打印棋盘函数的定义game.c调试一下打印的效果如下但是对于我们在玩排查雷时但是使用上面的棋盘我们定位速度就会显得很慢我们是否可以去将这个打印函数去改进一下在打印布置雷的信息和排查雷的信息时同时可以把行号和列号一起打印出来。代码改进如下调试一下棋盘显示效果如下在我们玩扫雷游戏时布置雷的信息不会打印出来只会打印排查雷的信息所以要把打印布置雷的信息给注释掉棋盘的初始化和打印完成之后接下来就是在mine数组内去布置雷了创建布置雷的函数test.c布置雷函数的声明game.h由于我们想要布置雷的位置是随机的那我们就要用到之前猜数字游戏的rand函数和srand函数了这里不做过多的讲解棋盘大小可以调整那么布置雷的个数是不是也可以去调整定义布置雷的个数game.h布置雷函数的定义game.c我们要使用到rand函数就必须要用srand函数去改变种子的大小srand函数的创建及种子的设置test.c以及使用这些函数要包含的头文件game.h因为include stdio.h和include game.h每个文件都要包含干脆直接将它整合到game.h布置好之后我们是不是开始要排查雷了排查时若排查到不是雷的地方该位置是不是要提供它所在周围一圈的雷的数量信息若排查到雷时则游戏结束若将除了雷的非雷位置全部排查出来则游戏胜利。创建排查雷函数game.c(1)玩家输入排查坐标功能和循环排雷条件的选取纠错Findmine函数的返回类型为void2判断玩家输入坐标是否合法纠错printf后补一个;3有两种情况第一种情况排查的坐标是布置雷的位置第二种情况排查的坐标是非雷的位置要显示周围一圈的雷数统计周围的雷数法1.纠错形式参数x、y的数据类型为int法2.接上面的第二种情况完善代码最后测试代码将雷数量改为80将mine棋盘打印出来方便看非雷位置为了测试游戏胜利的情况运行结果2.游戏的扩展总结本文从需求分析出发完整实现了控制台版扫雷游戏核心要点如下功能设计通过菜单控制游戏开始与退出棋盘为 9×9默认布置 10 个雷支持排查雷、显示周围雷数、判断胜负。数据结构使用两个 11×11 的二维数组——mine数组存放雷的分布‘0’ 表示无雷、‘1’ 表示有雷show数组存放玩家排查结果初始为 ‘*’。扩大一圈棋盘是为了避免排查边界坐标时发生数组越界。模块化编程将代码拆分为 game.h声明与宏定义、game.c函数实现、test.c游戏主逻辑三个文件职责清晰、便于维护。可扩展性通过宏定义控制棋盘大小与雷的数量修改一处即可调整游戏难度无需改动大量代码。随机布雷借助rand与srand函数实现雷的随机分布保证每次游戏体验不同。通过本项目你不仅掌握了一个完整小游戏的开发流程还练习了二维数组、函数封装、头文件管理、随机数等 C 语言核心知识点。后续可以尝试为游戏增加「标记雷」「展开空白区域」「计时器」「难度选择」等功能让游戏更加完善。