数组应用--扫雷详解

首先,我们将代码分成三个模块:测试游戏模块test.c(主要用来写mian函数 和game函数大体框架)、实现游戏模块game.c(主要用来写函数具体内容)、函数声明模块game.h(头文件)

第一步

详解:1、打出main函数--引出test()函数

2、写出test函数的具体内容:游戏不可能只玩一次,用do while循环,循环的第一件事就是菜单函数

3、将菜单函数具体写出 

第二步

详解:

1、既然菜单中出现需要进行选择的,为了告知玩家,自然而然需要打印出“请选择”

2、玩家选择时,需用到scanf函数,则需要设置变量(变量input要设置到do while循环外面,否则while后面的input显示错误)

3、选择后出现的多种情况,用switch语句

question:为什么while后用input,因为若输入1,1为真,break后则重新开始循环,若输入0,0为假,break后则循环结束,若输入其他数字,则都是非零为真,循环可重新开始

第三步:
首先我们要理清游戏的逻辑,我们需要一个棋盘,并且把雷的坐标布置好,然后开始扫雷,统计周围的雷数(tip:玩家的1,1坐标代表计算机的0,0;布置雷和扫雷要分两个数组 

 1、具体写出game函数的内容,设置两个二维数组,用来布置雷和排查雷,并将两个数组简单初始化为{0},接着初始化mine和show数组,加入参数‘*‘和’0’,在其他文件中显示为set(为什么要这样?因为在game.c文件中board[i][j]=不知道该等于‘*’还是‘0’,所以在初始化函数的时候直接再加一个参数,即可解决问题),然后对其展示。

 

 2、在头文件中声明行和列(为什么要定义ROWS、COLS?因为扫雷是以任意一位置为中心,周围八个来排查的,正是如此,所以边缘的位置实际上无法有周围的八个,因此我们假设给其外周再添上一圈,那么行列就自然都要加2)、在头文件中声明函数(注意要写类型void)( 形参一定要写[][],后面的要小写)(为什么DisplayBoard的[][]中是ROWS和COLS,而不是[ROW][COL]?展示的不应该是九行吗?因为传过来的函数mine就是ROWS和COLS,不可以变)

3、在game.c完善函数具体内容

先设置两个变量,然后两个嵌套的for循环(先行后列)

tip:DisplayBoard函数需要打印并且注意换行

再继续完善,用for循环打印列号(注意从0开始,否则会歪) 

4、开始布置雷

首先要确定雷的个数,设置变量EASY_COUNT,然后随机生成雷的坐标(rand()%row是什么意思?首先row=9,一个数模上9等于0~8之间的数,+1后是1~9之间的数,符合x坐标的范围。)(为什么把time设置在test()函数中?因为game()函数在test()函数中,而SetMine在game函数中)

 (count--是什么意思?count由原来的10多次循环-1,变为0后,所有雷扫出)

数组小tip:1、传参的时候只能传数组名,不加【】,只有形参才会有arr【】

2、一维数组【】可以为空,但二维数组行可省列不可省

5、开始扫雷啦

设置函数FineMind,用户需自己输入雷的坐标,所以有scanf函数且设置变量x,y,既然要输入,就存在输的对与不对,所以有选择语句,显示炸死后,要显示雷的坐标,若没有炸死,需要计算周围雷的个数,于是有了get_mine_count()函数

 

具体优化函数

首先要知道‘3’-‘0’=3,因为‘’加数组表示ASCII码表中的值,相减为数字,利用周围八个坐标代表的‘1’、‘0’和‘0’的差值可以计算出雷的数目

 

最后的完善 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值