C语言入门级小游戏2 --- 扫雷(简单版)

一 总体框架 

和之前的三子棋一样, 我们还是用三个文件来完成这个小游戏:

game.c ----   游戏的主体实现 

game.h ---- 游戏函数的声明

test.c ----- 游戏测试

二   游戏的实现

        进去游戏, 首先要打印一个菜单, 让玩家选择,  代码和效果如下 :

 

        接下来就到了玩家选择环节, 我们可以声明一个int型的input用来存放玩家的选择, 为了满足玩家重复游玩的需要, 我们就需要借助do-while循环, 那么玩家选择的时候不难想到, 会有三种情况, 第一种就是选1玩游戏, 第二种选0退出游戏, 还有就是输入其他不合我们规范的字符, 我们可以用switch-case这个结构来实现, 代码和运行结果如下:

 

  从以上代码中, 我们不难发现, 其实选择0以及选择非法的情况以及处理完了, 只剩下玩游戏这个内容, 我们放在game()函数中, 扫雷这个游戏相信大家都有所了解, 玩法就不在这里赘述了, 我们需要一个空间来存放雷以及让玩家排查雷, 我们就想到了可以用二维数组mine来实现, 于是我们用字符'1'来表示雷, 用字符'0'来表示没有雷, 但是这就又产生了另一个问题, 当我们把扫雷棋盘打印后, 雷以及没有雷的位置都是透明的, 玩家直接可以看出来, 于是我们就可以在另外搞一个二维数组show专门用来展示给玩家 , 这次我们实现一个9*9的扫雷棋盘, 我们依然可以定义两个全局变量ROW和COL来表示行和列, 方便以后对棋盘大小的修改. 除此之外我们还需要注意一点, 就是玩家在排查雷的时候, 排查的是玩家输入的位置的周围8个位置, 那么如果是9*9个格子, 当排查到边界的时候就会出现角标越界的错误, 所以我们正在需要11*11的 格子, 但是显示给玩家的只有出了最外面一层的9*9的棋盘. 

        然后我们就需要初始化棋盘, 先把mine棋盘全部初始化为'0', show棋盘全部初始化为'*', 用函数initBoard()来实现, 然后还需要一个函数boardDisplay来吧show棋盘展示给玩家, 代码和效果如下:

 

 接着, 我们就需要布置雷, 我们随机布置10个雷, 用函数setMine()来实现, 代码如下:

 

 

紧接着, 就到了玩家排雷的环节, 如果玩家不幸排到了雷的位置, 则玩家被炸死, 游戏结束, 同时我们打印出棋盘本来的内容, 让玩家死的明白; 如果玩家排查的是安全地点, 则需要统计出该位置周围一圈的类的个数, 用函数getCount()来实现. 除此之外, 我们还需要考虑到玩家输入坐标的非法问题, 比如说超出边界, 比如所选位置已排查. 我们用函数findMine()来实现 , 此时我们只写 简单的版本, 就是每次只能排查一个位置, 不能一查查一片. 我们知道当把所有的雷都排查出来, 即所有没有雷的地方都被玩家选完, 即获胜并结束这局游戏, 我们可以定义一个int类型的count, 只要count等于格子总数 - 雷 的数目, 则获胜. 代码如下:

 

 

三 所有的代码以及游戏的运行 

game.h

 game.c

 

 

 

 

 test.c

 

 

 

 运行:

 

 

 

结束!!!! 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想菜的鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值