扫雷游戏的基本实现

哈喽,大家好!今天小编给大家讲解一下扫雷游戏的基本实现。打开vs首先创建三个文件

test.c :用于测试

game.c 实现游戏的内容

game.h  声明函数,定义宏

扫雷

一.菜单的实现

首先我们需要一个菜单来和玩家做一个交互->玩游戏还是退出?

从main()进去之后先打印菜单也就是执行menu(),之后我们建立一个变量input用来执行用户的选择

,接着用printf("请选择:->");提醒一下,接着我们输入,利用switch语句我们可以基本实现:

1.玩游戏    0.退出游戏    非0非1.重新选择

这里考虑到玩家玩完一把之后还想玩,所以使用do...while()循环,先把菜单打印

当玩家选0时,input也为0,就会退出

二.游戏内部的实现

012345678

1

2
3
4
5
6
7
8

我们要实现一个9*9大小的扫雷,那么我们就需要创建一个二维数组去实现这个9*9的数据,

那么我们怎样去判断某个地方是不是雷呢? 我们这里的话用0表示不是雷,1表示雷

假设(3,4)这个位置是这样的

最中间的点为(3,4)点

我们可以看到,围绕(3,4)的八个元素只有一个1,也就是只有一个雷,那么我们在输入3,4之后,那么该点应该从0变成1(周围有一个雷),那么这里我们就有了歧义,说这个到底是雷呢还是用于计算雷的个数的呢?

那么我们为了避免这种情况,我们再创建一个二维数组,第一个数组用于布置雷,第二个数组用于给玩

家看的

紧接着我们开始初始化数组

在这里我们分别创建了mine,show数组.这里可能有朋友要问了,第一个数组放的不是0和1吗?为啥要用char类型呢?       

那么这里我们说,因为show数组的元素是char类型,我们为了方便管理所以mine数组也使用了char类型

这里的Rows和Cols分别表示行和列,因为我们要频繁的使用,再一个方便以后修改,所以用宏定义

这里说一下为什么要定义Rows 为 Row+2 

因为数组在调用时,它是从0开始的。数组下标是0-8,而玩家在输入的时候不可能按着下标去输

所以我们需要这样整:

直接创建一个11*11的数组。

现在我们开始一步步实现初始化数组  打印数组  放雷   排查

1.初始化数组

我们写一个initboard函数用来初始化数组,它的参数为数组,行和列,还有要初始化的元素

通过两层for循环我们就可以把数组中的每个元素初始化为我们想要的元素

2.打印数组

print函数参数是数组,我们要打印的行,列

因为我们其实只需要操作9*9的元素

所以在打印的时候就不要Rows,Cols了,可以直接从1开始到row或col进行打印

3.布置雷

set_mine函数用于布置雷,而我们的雷是在数组中布置的,所以参数方面需要数组元素和你要布置雷的个数

这里的话就是利用rand函数的随机返回值,去随意设置雷的位置,每次坐标上的字符如果是'0',则会被替换为'1',每布置一次,thunder减减一下

4.排查雷

设置变量win  将所有雷排查完

因为troubleshooting函数需要根据mine数组来输出show数组,所以这里需要传两个数组

首先进去之后先用printf函数提示用户输入,紧接着创建变量x,y   根据输入的x,y值去判断有没有越界,如果越界就提示“输的位置越界了,请重新输入”,如果没有越界,就进去判断你输入的点是不是'1',

如果是就提示"你被炸死了",反之则用GetMineCount()函数(计算输入坐标周围八个位置有几个雷)的返回值替换自己输入坐标的值,并将win自减一下,当win为0时游戏胜利

troubleshooting函数

计算周围八个位置字符的大小再减去8个'0'

博客:扫雷 · 化L1/Test_c - 码云 - 开源中国 (gitee.com)

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值