C语言扫雷初阶(9)


前言

  扫雷可是家喻户晓的小游戏了,想不到我们已经有了编写它的能力吧!


一、扫雷游戏分析和设计

扫雷游戏的功能说明

 1.使用控制台来实现
 2.游戏可以通过菜单来实现继续玩还是退出游戏
 3.扫雷的棋盘是9 * 9的格子
 4.默认随机布置10个雷
 5.可以排查雷
  如果位置不是雷,就显示周围有几个雷,并显示
  如果是雷,则游戏失败,结束
  如果排查完10个雷,则游戏成功,结束
实现预计效果:
在这里插入图片描述

游戏的分析和设计

扫雷过程中,布置的雷和排查的雷都需要存储,所以我们需要一定的数据结构来存储这些信息
因为要在9 * 9的棋盘上布置雷的信息和排查雷,所以我们首先想到创建一个9 * 9的数组来存放信息
在这里插入图片描述
如果这个位置布置雷,我们存放1,否则存放0
在这里插入图片描述
可是,万一我们要排查(8,6)这个坐标的时候,我们访问周围的一圈8个黄色位置,统计周围雷的个数时,最下面三个坐标就会越界,为了防止越界,我们想到一个好方法:

在创建数组的时候,将数组扩大一圈!即创建一个11 * 11的数组,周围一圈不布置雷,即存0,这样就解决了越界的问题
在这里插入图片描述

继续分析,当我们排查出一个非零点,得到一个周围雷数量的数据,那么这个数据应该保存在哪里?
如果存放在布置雷的这个棋盘中,这样就会和原来雷的信息相混淆
正确的解决办法是,雷和非雷的信息都不使用数字,使用字符就行,我们在单独创建一个棋盘,一个棋盘mine用来放置雷,一个棋盘show用来存放排查出的雷的信息,这样就不会互相干扰了

二、扫雷游戏的代码实现

首先要明确,我们仍然分为三个文件,它们分别为:

game.h、game.c、test.c

对于主函数所在的test()函数,我们参考前面猜数字游戏
在这里插入图片描述
而对于game.h文件,我们需要思考游戏过程中要有几个函数

初始化棋盘,打印棋盘,布置雷,排查雷
在这里插入图片描述

  对于game()函数,显然要先创建两个棋盘,再初始化它们,然后打印show棋盘,接着布置雷,最后就是排查雷了
  初始化棋盘,本质上就是for循环二维数组,与下图类似,打印棋盘同理
  至于布置雷,则需要注意x,y坐标的位置,且不与已有雷重复即可
在这里插入图片描述
  怎么做到获取一个非雷坐标周围雷的数量呢?

事实上,你注意到’1’-'0’等于1,我如果将该点周围八个点加起来,减去八个’0’不就得到周围雷的数量了吗
在这里插入图片描述

  排查雷,我们建立一个循环,等到成功排查非雷的数量等于row*col-雷的数量的时候,即被视为成功,我们输入一个正确的坐标后,若是雷,直接炸死,跳出循环;如果不是雷,修改show棋盘的相应坐标并打印,亦或者循环条件结束,我们成功找出了所有的雷
在这里插入图片描述
最后实际效果演示
在这里插入图片描述


总结

  到目前为止,该扫雷的效果跟我们网页游玩的还是有差异,比如说时间限制、开局展成一篇、是否可以标记雷等,这些我们下次再讨论。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值