扫雷游戏代码

一 有关棋盘的步骤

1.定义棋盘

2.打印棋盘

3.布置雷

4.排查雷

二 有关游戏选项菜单

1.菜单

三 需要解决问题、

1.存放易产生歧义

解决:初始化两个数组 一个存放需要的信息 一个排查出的信息

2.统计一个坐标需要周围雷 可能会越界

解决 :扩大棋盘 计划9*9的棋盘实际打印11*11的棋盘

3.随机布置雷时可能重复导致埋雷数变少

解决:在埋雷是加入if()语句判断埋雷位置是否重复

四 操作中可能发生的问题

1.在初始化 和打印数组中要准确地写好数组的规格 哪些地方是11*11哪些地方用的是9*9

2.定义函数是要写正确函数的类型 不然在写完后出错又要重新检查

五 为了配合检查代码是否可以正常运行和执行该有的功能 将通过define定义行 列 布置雷数等一些代码中常用的变量 方便只会修改方便

六 写代码时将采用两个.c文件和一个.h文件 

一 先看头文件

.h文件中的内容 其中包含三个头文件 分别引用标志库  time()函数和srand()函数 rand()函数

define 分别定义计划行 列 row 和col 已经实际行 列 rows和cols 以及布置雷数 C

函数声明有打印菜单menu

初始化棋盘数组init 这里的set是用来存放分别对两个数组的内容 一个存放‘0’mine数组一个存放‘*’show数组这两个都是二维数组  

display用来打印棋盘 一次打印一个棋盘 其中打印的范围一个是9*9 下标行列都是从1到9

setplay用来布置雷的数目这里需要使用rand()来随机布置雷的位置 且要将雷放在9*9规定的位置

findplay用来查找坐标是否有雷 以及有雷无雷时要进行的不同的功能

conunts是用来数查找坐标周围的8个格雷的个数并进行返回

二 源文件1

第一步先设置时间差种子方便之后布置雷使用

第二步创建input 一是用来选择菜单是否开始游戏 二是用来作为循环条件判断控制循环

第三步循环内部使用分支语句用来判断输入分别是1和0等不同的选择时执行不同功能 这里可用Switch也可以用if语句 输入0是游戏结束并跳出Switch 同时input此时为0使得循环结束    input为1时则进入game()函数中开始进行扫雷游戏

1.game函数中首先定义两个数组  mine是用来布置雷用的 而show是用来排查雷用这里数组大小是11*11

2.因此在对mine初始化是对set形参中传输的是‘0’而show对set形参中传输的是‘*’这里初始化是11*11全部初始化

3.display是打印棋盘的 在正常游戏中只打印show就可以 但是为了测试代码的功能也可以再雷布置好后打印mine        打印时是打印9*9

4.setplay用来布置雷所以传输的是mine数组 布置时也是在9*9的格子中布置

5findplay是排查雷这样mine和show都用到都要传输 这里使用的也是9*9的范围

这是打印好的菜单 这里的形式不唯一 只要是告诉游玩者1是开始游戏0是结束游戏的规则信息

初始化 给11*11的棋盘全部赋上set变量所存储器的字符下标是行列都是从0到10

打印棋盘这里除了打印9*9的棋盘内容外还要加上几行几列的信息 方便游玩 第一个循环打印列的信息 第二个循环负责打印棋盘和行信息 这里下标是行列都是从0到8

setplay用来布置雷 利用提前定义好的雷数作为循环判断条件 每成功放置一个雷 雷数就-1当未布置雷数为0时循环结束 同时内部通过rand()来随机坐标布置雷%9+1使范围控制在下标1到9中if条件用来放置重复一个位置布置雷

findplay用来排查雷 首先scanf输入要排查的坐标  第一个if用来判断输入的范围是否是行列1到9的正确位置 在里面嵌套的第二个if是用来判断排查位置是否有雷 若有雷 则游戏结束 若无雷 则在排查位置显示出排查位置周围8个位置具有雷的数目   

并通过do while 循环不断进行排查 设置win作为循环是否停止的条件 只有被炸死 或者胜利才会停止可以通过break停止或者给win赋值为0的方式来停止

设置o是用来计数的 计排查次数 初始o为9*9=81 每成功排查一次就o-1一次当o与布置雷的数目相等时就说明所有的雷都排查完毕 游戏胜利循环结束

conuts是用来提示玩家周围排查位置周围8个位置有几个雷的信息 由于函数是int类型 所以返回也需要是int类型 而在初始化和布置雷时所用的都是字符‘0’和‘1’所以需要转换 通过‘4’-‘0’=4 ‘5’=5+‘0’可以通过加减‘0’来得到想要的类型是字符还是整型 

这就是整个扫雷代码的过程 有些瑕疵其中还有许多可以优化的步骤 还望多多包涵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值