#C语言 简单扫雷游戏代码写作(超详细思路,写法)

写一个简单的扫雷游戏:

代码编写最终实现的功能:

1:打印游戏菜单,让玩家决定游戏开始或结束

2:生成一个9*9的棋盘,在棋盘中随机生成10个雷

3:玩家通过选择棋盘坐标来实现所要排查的位置

4:在玩家选择位置后,在该位点显示周围一圈的雷的个数

5:在玩家排查出所有雷后,显示游戏胜利

首先是打印菜单:

然后,构建让玩家决定游戏开始或结束的程序:

这里采用do-while循环,do-while的好处是,可以先打印菜单,再根据玩家选择决定游戏是否进行。分支我采用的是switch。(别忘了break)

然后就是构建游戏代码了:

思路:

为了增加代码的可读性,我们设计三个文件:

saolei.c   (这个文件是为了实现代码的运行)

add.c      (这个文件是为了写游戏逻辑的代码,如某些函数等)

add.h   (这个文件是放函数的声明,定义等)

其中,我们可以先把add.h中定义一些值和声明一些头文件以便将来使用:

这里提一下#define:

然后就是让saolei.c和add.c两个源文件中包含add.h这个头文件。

1,首先,我们要构建游戏棋盘,用来存放和布置雷

那我们应该用什么表示雷呢?如果用数字,比如用’0‘表示没雷的位置,用‘1’表示雷,那么便会有一个问题,玩家在选择棋盘坐标后,如果该位置没有雷,则会显示周围一圈的雷的个数,显示的个数也是数字,这时怎么分清哪个是雷,哪个是显示周围一圈雷的个数呢?

所以,不应该用数字表示雷的位置,应该用字符,比如字符'1'来表示有雷的位置,字符‘0’来表示没有雷的位置(注意,同样都是1或0,但字符1或0与数字1或0有着实质的区别)

在布置好雷的位置后,需注意,实际玩游戏过程中,玩家是无法看到雷的具体位置的,那么,如何隐藏雷的位置呢?这就需要建立两个二维数组了(即两个棋盘),一个是供玩家看的隐藏雷的棋盘,一个是供电脑判断的实际棋盘。玩家棋盘没被探索的部分则用字符‘*’表示,探索的部分,如果没有雷,则显示表示周围有几个雷的数字,如下:

在创建数组的时候,还有一个问题需要注意:就是将来在排查雷的时候,在排查边缘的位置的周围一圈时,可能会出现数组越界访问的非法行为,这时该怎么办呢?

为了防止越界,我们不妨将棋盘(数组)扩大一些,使它多一层边界,这样访问的时候就不会越界:

想好思路后,就开始创建两个数组:

其中mine是实际棋盘,show是展示棋盘

下一步就是将棋盘初始化,这里不妨写一个专门为了初始化的函数,我这里写做create函数,

既然是函数,那么就要写传入什么值,既要初始化棋盘(数组),那么肯定要传入一个数组,其次要传入棋盘行和列,以及初始化用的字符(如‘*’):把这个函数写到add.c源文件中。

然后便是,给函数传入值:

完成初始化后,下一步便是打印出棋盘,供玩家观察棋盘,便于接下来选择排查雷的位置了,这里我们也创建一个专门为了打印的函数,我把它命名为print:

打印数组也需要数组名,行,列:

由于打印的数组是给玩家看的,所以只需要打印隐藏雷的数组(棋盘)就行:

打印好数组之后,则需要开始布置雷了,那怎么才能随机产生雷呢?那么则需要用到rand函数了

rand函数:

rand:

使用rand函数,则需要包含头文件stdlib.h,rand函数会返回一个伪函数,范围在0~RAND_MAX(默认值32767)之间

而rand函数是对一个叫“种子”的基准值进行运算生成的随机数,“种子”一直默认为1,如果要使种子变化,则需要用到srand函数:

srand:

在程序中用来初始化随机数的生成器,能够使种子变化随机。

可是,这时候便有一个问题,为了生成一个随机数,则需要另一个随机数(就像鸡生蛋,蛋生鸡一样)这个随机数如何去找呢?这就需要time函数了,在程序中我们一般是使用程序运行的时间来作为种子的,因为时间是时刻变化的。

time函数:

time函数是用于获取当前时间的函数,它定义在time.h头文件中。用于表示时间值,一般是从1970年1月1日00:00:00UTC到当前时间的秒数。

因此简单来说,如果想要获取随机值,只需要下面这个公式:

如果我们要生成a~b的随机数,则套用公式:

a+rand()%(b-a+1);

即可。

我们把srand公式加入到saolei.c中:

接下来构建创建雷的函数:(我这里写做bulei)

布置好雷之后,接下来便是让玩家扫雷了,这里再创建一个扫雷的函数,我这里命名为paicha:

这里还需要创建一个函数,是为了检测玩家输入坐标周围有几个雷的函数,我这里命名为tance:

因为探测玩家输入坐标周围一圈,无非就是让输入的数组横纵坐标加或减1:

每写一个函数后,都要把该函数放到add.h里面声明一下。

函数到此就写的差不多啦,最后再检查一下,得到最后的结果:

saolei.c:

add.h:

add.c:

写代码时注意事项:

1:saolei.c 与add.c 都需要包含头文件add.h

1:创建数组的是字符数组,不是整型数组

2:创建初始化棋盘的creat函数里的行和列与print函数,builei函数都不同,因为初始化时,数组为了后续访问时越界,多了两行两列,后续布雷等操作时,不包含边缘的那两行所以有所不同

恭喜你坚持看到这里了,相信你也学会了如何写该游戏了,创作不易,支持一下吧๐·°(৹˃̵﹏˂̵৹)°·๐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值