C语言实现一个扫雷游戏

首先,我们在编译器创建三个文件:game.h//作各类函数的声明及包含头文件、宏定义,game.c//用于各类函数的实现,text.c//包含main函数及扫雷游戏的菜单打印等

我们在text.c文件中写一个menu函数来打印菜单:

在main函数中利用循环和switch选择语句嵌套:

利用do while循环体可以达到先打印菜单的效果

我们定义了两个二维字符数组一个命名为mine数组,一个命名为show数组,mine数组用于存放雷的信息,show数组用于扫雷

在game.h文件中我们包含宏定义:这样可以达到牵一发而动全身的效果

然后在text.c中定义两个二维数组:

然后进行数组的初始化,我们在初始化的时候将mine数组里全放‘0’字符,show数组中全放‘*’字符:

//函数调用

函数实现:

//在传参的时候我们多放一个虚参接收,这样避免写死函数,利用set接收

接下来我们进行棋盘的打印:函数调用如下

函数实现:

接下来我们来布置雷的分布,还是在mine数组中实现:

函数调用:

函数实现:EASY_COUNT为game.h的宏定义://我们实现的9*9棋盘,然后布置10个雷,这里我们的初始化棋盘是全为字符‘0’的,那么用字符‘1表示为雷。

//这里利用rand函数和srand函数生成随机数,用于实现坐标的随机性

公式为(b-a+1)+a可以生成a~b间的随机数

//整个程序中只用一次srand函数即可,count循环10次,为什么循环判断条件是count而不是count--呢,因为若使用count--的话,无法保证每次循环都能赋‘1’,假设第一次在1,1坐标赋值‘1’,那么下次循环如果随机数产生的坐标还是1,1的话那么if语句不成立,这次循环就没有赋值,那么就无法保证10个雷都布置了

//不可这么写,count--放于后面,这样就可以保证安好一个雷再--,10次循环,10个雷

接下来我们有了随机雷的分布,那么还需要统计某坐标的周围8个坐标雷的个数

在画图中列一下,设最中心的坐标为x,y依次类推算出其他8个坐标

0的ASCII值为48

1----------------49

2----------------50

数字加上字符就是总的ASCII值,例如0的ASCII码值为48,那么用2+‘0’就得50(2的ASCII值)

乘法也一样8*‘0’=384,那么这么计算各个坐标相加再减去8*‘0’就可以得到雷的个数

接下来就是扫雷的核心代码块:

函数调用:

函数实现:

x,y为坐标,win变量用于计数扫出的雷个数,首先,我们的坐标要合法,如果不合法就请用户重新输入,合法就进入下一条选择语句,如果用户输入的坐标恰好是‘1’(雷)所在坐标,那么将提示用户失败的语句,并打印mine棋盘显示雷安排的情况break跳出循环,如果用户输入的坐标不是雷区,那么就打印show数组显示排雷的情况并且win++,直到win==雷数,扫雷结束,游戏胜利。

运行如下:

菜单部分:

选了1:

选了0:

:开始扫雷:我们在键盘输入坐标查雷

游戏失败的情况:

由于要排查71个雷我们不完整演示,下面把雷的个数设置为80个,并且在布置雷后就打印棋盘,这样便于观看游戏成功的样子:

然后下面是game.h:5个函数块的声明

综上所述,就是完整的扫雷游戏实现了,代码折合一下写了近150行,这些就是目前的我的理解了,继续努力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值