C语言数组和函数实践:扫雷游戏

使用c语言数组与函数知识实现简易的控制台扫雷游戏。

功能描述

 扫雷游戏的预期功能:
(1)游戏整体在控制台实现,通过菜单选择继续玩或者退出游戏
(2)游戏为9*9棋盘,默认布置10个雷
(3)排雷时,如果位置是雷游戏结束,如果不是显示周围雷的个数,全部找出则排雷成功

思路分析

 程序逻辑大致如下:
(1)先打印菜单,通过菜单选择玩游戏或退出游戏
(2)选择玩游戏后,初始化棋盘,此时棋盘默认置*
(3)初始化之后,在控制台上打印棋盘
(4)开始布置雷
(5)排雷,游戏结束

游戏分析与设计

从程序逻辑可以看出,代码的实现需要多个函数,我们把函数的声明放在game.h中,函数的实现放在game.c,菜单等主函数框架放在test.c中。结合程序逻辑,我们来逐步分析游戏设计。

打印菜单

运行程序,控制台首先出现的应该是菜单页面,通过输入1或0选择是否开始扫雷,这里我们用switch循环实现判断,menu函数实现菜单的打印。代码实现如下:
在这里插入图片描述
在这里插入图片描述

初始化棋盘

通过菜单进入游戏后,程序逻辑来到棋盘设置。要打印棋盘,首先想到的是用9*9数组来实现。

思考:应如何设置棋盘,设置几个数组来放置?
(1)棋盘初始化时,在棋盘的随机位置放置10个雷,有雷置1,无雷置0
(2)后续扫雷排查坐标信息时,有雷爆炸,无雷显示周围雷数,因此要用到两个数组
(3)排查雷时,无雷情况下若排查的坐标在边界处,不能完全访问周围8个坐标,会造成越界访问。
(4)初始化放雷和排查格子时周围雷为1时都会显示1,可读性变差,
     为方便打印,放雷的棋盘用字符0 和1显示,排查信息的棋盘初始化置*。

因此:需要用到两个11*11的数组,数组内容均用字符显示!
两个数组初始化应如下图:
在这里插入图片描述
在这里插入图片描述

对棋盘初始化用到InitBoard函数,函数声明后,对函数传参,实现初始化功能

在这里插入图片描述

打印棋盘

初始化之后,我们想看一下初始化的实现,因此要用DisplayBoard函数来实现打印,为方便后续排雷操作,我们把行列号一并打印,代码如下:
在这里插入图片描述
注意:两个数组打印只需打印排查的数组即可!因为开始游戏后玩家无法看到第一个数组放置雷的信息!
打印效果如下:
在这里插入图片描述

随机放雷

布置雷我们用SetMine 函数,利用rand函数限制横纵坐标范围都是1到9,rand的使用需要用到srand实现真正的随机,这里头文件要包含time.h和stdlib.h。随机放置10个雷。每放一个count–。
在这里插入图片描述

排查雷的坐标

排查雷我们用FindMine函数,排查逻辑为:输入要排查的坐标,判断坐标是否非法,合法情况下若有雷,即对应数组内存的是字符1。打印你被炸死了,游戏结束。如果没有雷,则显示周围8个格子的雷信息。这里要用到GetMineCount 函数,函数返回值为排查坐标周围8个格子的雷数总和。

注意:
(1)排查不能无限制进行,因此循环条件为排查次数小于剩下的空格子数71
(2)若所有雷都被排查出,即71个空格全被找出,打印“恭喜你排雷成功”。

在这里插入图片描述

控制台模拟实现

在这里插入图片描述

游戏改进

我们利用数组与函数实现了简易的扫雷游戏,但该游戏还存在一定的缺陷:
(1)扫雷是在控制台实现,玩家游戏体验不足
(2)不能实现插旗操作
(3)排查坐标一次只能进行一个,周围没雷无法展开周围

以上是c语言扫雷的简易实现,欢迎交流!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值