扫雷游戏(C语言)(超详细!新手小白入!)
OKkankan 2024-06-11 12:05:07 阅读 93
扫雷游戏详细过程
一.前言二.游戏的分析和设计1.厘清整体思路2.棋盘的构建与思路3.初始化及打印棋盘4.布置雷5.排查雷三.扫雷游戏的扩展
一.前言
游戏介绍
这是一款经典的扫雷游戏,玩家可以任意点击一个小方框,若不是雷,则会显示周边有几个雷,并把雷的个数显示出来,若是雷,则被炸死,游戏结束。目前我们可以用已知的C语言知识来编写这样一个小游戏。
二.游戏的分析和设计
1.厘清整体思路
(1)首先我们要明确使用到的C语言知识,不难想象我们可以用二维数组建立棋盘,再在此基础上实现雷的布置,雷的排查等,用到的C语言知识会有函数的调用以及声明、随机数的生成、各类循环的用法等等
(2)为了方便我们写程序,我们可以使用多文件的方法,在test.c文件中实现代码的测试,在game.h和game.c文件中进行扫雷功能的实现,如下:
2.棋盘的构建与思路
(1)在构建棋盘之前,我们要进行一个游戏的开始,也就是制作一个菜单(制作菜单很容易想到switch语句),如下:
(2)使用二维数组建立棋盘,我们要构建一个9乘9的棋盘,进行雷的布置和雷的排查,如果一个位置是雷我们就放上1,不是雷就存放0:
(3)A如上图所示,这样我们就想到一个问题,如果我们要计算一个非雷处周围有几个雷,我们就需要计算它的一周相加是几,如果在中间我们可以计算它一周的值,但如果是边缘呢,这样我们就想到将棋盘扩大一圈,但是外围的一圈我们不放雷,也就不影响最终结果,还可以方便计算,但是我们打印出来的可以只是9乘9的棋盘;B我们不妨再想一些问题,我们将一个棋盘布置好雷之后,我们要怎样知道被排查后的雷的信息呢?如果放在一个棋盘中那么整个信息就会有点混乱,而且不方便打印,如此一来,我们可以想到,使用两个棋盘来打印,一个用来存放雷,一个用来存放排查出的雷的信息 ;C ROW代表行,COL代表列,ROW和COL就代表布置雷的范围,ROWS和COLS代表扩大范围的棋盘,这样我们的棋盘最初始的形式就形成了。为了后期方便使用,我们可以在game.h头文件中定义这些变量,并且可以声明后面使用的函数:
下面展示一些 内联代码片
。
char mine[ROWS][COLS]={ 0};//存放雷的信息char show[ROWS][COLS]={ 0};//存放排查出的雷的信息
3.初始化及打印棋盘
如图所示:
第一个是mine数组,布置雷;第二个是show数组,存放被排查出的雷的信息,同时为了保持神秘,show数组最开始用字符‘*’初始化,为了可以使用同一套函数,将mine数组初始化为‘0’和‘1’ 下面展示一些 内联代码片
。
IintBoard(mine, ROWS, COLS,'0');//初始化棋盘IintBoard(show, ROWS, COLS,'*');DisplayBoard(show,ROW,COL);//打印棋盘,因为我们只需要展示9*9的棋盘,打印ROW COL即可DisplayBoard(mine,ROW,COL);
我们在game.c的文件中实现函数,在test.c文件中调用,在game.h的文件中进行声明,下面给出我们头文件中的声明,我们要注意的是,在上面的代码片中我们在初始化棋盘时候传入的参数是ROWS和COLS,但是打印棋盘的时候传入的是ROW和COL,这一点我们要明确清楚。另外为了方便我们的行和列,我们在打印棋盘时候也可以将行和列直接打印出来,下面是我们利用循环的知识打印出具体的初始化和棋盘的代码:
初始化打印如下:
4.布置雷
首先我们要明确一点,我们是在mine棋盘中布置雷,在show棋盘中将雷的信息展示出来,下面我们就要思考如何去布置10个雷进去,同时要注意的是我们布置雷要在9乘9的棋盘中布置,所以我们传入的参数应该是ROW和COL,不难想象我们可以利用随机数的方法,我们要注意的是随机数的用法和它所需要的头文件(要生成1到100的随机数:rand()%100+1,%100的余数是0到99,在加1就是0到100):
5.排查雷
在雷都布置好的基础之上,我们就要开始排查雷,我们要如何排查雷,我们不妨认真思考一下,我们很容易想到用坐标的方式表示我们要排查的雷,那么我们要如何计算我们排查的位置周围有几个雷呢,给大家展示一张图说明清楚以及代码展示:
三.扫雷游戏的扩展
我们在已有的C语言基础上可以在尝试更高难度的扫雷游戏,大家可以自己尝试挑战自己!
• 是否可以选择游戏难度
简单99棋盘,10个雷
中等1616棋盘,40个雷
困难30*16棋盘,99个雷
• 如果排查位置不是雷,周围也没有雷,可以展开周围的⼀⽚
• 是否可以标记雷
• 是否可以加上排雷的时间显示
在线扫雷游戏:http://www.minesweeper.cn/
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。