c语言实现9x9扫雷游戏

用c语言实现9*9扫雷:

首先我们可以创建3个文件,头文件用来声明,然后text.c写主体框架,game.c写游戏运行代码.

先在text.c写出游戏菜单:

先运行看看有没有问题:

然后把printf("玩游戏\n");改成game()函数来实现扫雷:

先在game()写出主体框架:

第一步创建棋盘:用二维数组创建一个棋盘。

为什么创建两个?一个是用来存放雷的,一个是用来排查的。为什么[ ]里面不是数字,因为这两个数组后面还需要使用,如果[ ]里面写了数字,当你想更改棋盘大小时会比较的麻烦。所以我们可以创建一个头文件来声明,这样只需要在头文件改数据大小就可以。

再让原来的函数包含一下头文件就行。

为什么行和列都要+2呢:假设我们排查(2,5)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数是1?
假设我们排查(8,6)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数时,最下⾯的三
个坐标就会越界,为了防⽌越界,我们在设计的时候,给数组扩⼤⼀圈,雷还是布置在中间的9*9的坐
标上,周围⼀圈不去布置雷就⾏,这样就解决了越界的问题。所以我们将存放数据的数组创建成11*11
是⽐较合适。

第二步就是初始化了:我们将棋盘信息,以及要初始化的数据'0','*'传输过去。

为什么最后接受的值是char set这样可以同时接受两个函数的传值,不用再写一个函数了。

初始化可以说是游戏运行代码了,所以我们将它写在game.c里面,利用for循环可以轻松将每一个坐标都初始化。我们将初始化命名为InitBoard。

那第三部就是要打印棋盘:

在头文件进行声明:

在text.c文件里面进行传值:为什么这是传的是row和col,我们使用的时候是不需要最外圈的那一层,最外圈只是辅助后面扫描周围有多少雷的。

打印棋盘命名为:DisplayBoard。也是在game.c里面进行编写。打印棋盘的方法和打印9x9乘法口诀表方法一样。

这里有小伙伴就要问啦,怎么突然冒出个m和n呢,这是为了让你在测试的时候,以及使用的时候更好的定位想要查找的坐标。打印出来就会有坐标:

第三步布置雷:

然后在头文件声明:

最后在game.c编写代码,这里还是先在头文件先声明一下Mines,Mines用来代替雷的数量,原因和行和列的声明一样。我们可以通过srand函数来生成随机数,然后%上行和列的值+1,就可以得到一个地雷坐标,然后判断是否放置雷,最后通过while循环布置10个雷。

记得引用以及声明这个函数

第四步也是最后一步就是排雷了:

同样先在头文件进行声明:

因为等下两个棋盘的信息都需要用到所以都要传。

声明3个变量,a和b作为等下输入的坐标,win用来记录已经探索的非雷区域。先写while循环,条件为:列数×行数-雷的数量>已经探索的非雷区域。当列数×行数-雷的数量=已经探索的非雷区域时就说明排雷成功。

由上面打印的坐标可知a和b的范围是1-9即row或col,所以我们要先满足这个范围才能进行判断是否是雷,如果是,则打印“很遗憾,你被炸死了”,并且把布置雷的那张图也打印出。

如果不是则要判断周围有几个雷,并将这个值赋值到探索的那个坐标上

为了判断周围雷的数量所以我们要引用一个新的函数GetMineCount来帮助我们判断。

返回值为周围8个坐标的值的和相加,而字符0怎么可以相加呢?

字符0和0相差一个字符0,就是说“0”-“0”=0,“1”-“0”=1,“2”-“0”=2,。

所以返回值写为整型,然后加上一个字符0就可以得到周围有多少个雷了。这个函数只需放在FindMine函数上即可。

最终代码

game.h

game.c

text.c

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值