数组和函数实现:扫雷游戏

本文详细描述了一款基于C语言的游戏实现,包括游戏开始的菜单、设置,雷的随机布置,以及排查雷过程中的逻辑。重点讲解了如何使用伪随机数(通过`srand`和`rand`函数)和二维字符数组来表示雷的分布,以及避免越界问题。
摘要由CSDN通过智能技术生成

test.c--游戏的整个逻辑

game.h--函数的声明

game.c--游戏的实现

1.首先游戏的开始打印菜单

2.游戏的设置

   菜单的打印后选择数字是否玩游戏,通过do……while循环和switch实现

3.游戏的实现

#.布置雷(随机)

#扫雷(踩到雷被炸死,没有踩到雷,在相应位置统计周围雷的个数)

分析

如果要记录布置好的雷的信息->二维数组

如果信息在一个数组上*——雷,#——不是雷,数字——周围雷的个数

信息比较多,所以建立两个数组,一个放雷的信息,一个放排查出雷的信息;用1表示雷,0表示不是雷的位置

当记录最边上的雷的的信息时,会越界;如记录绿色格子周围雷的个数时,黄色格子会越界

因此将格子再增大一圈,全部放0;防止越界,因此另外一个数组也增大一圈;

在放排查雷的信息的这个数组里面,未排查的地方放'*’,则为字符数组;

*.初始化棋盘

为了方便更改棋盘的行列数,在game.h里用define定义行列数,并对打印棋盘函数声明

形参的行列为小写,定义时为大写

在game.c中实现函数棋盘的打印

其中set传参方便自己设置打印的符号;

*.打印棋盘

只需打印中间的棋盘,虽然只使用中间的九行九列,但是传参仍然要传十一行十一列;

同理在game.c实现,在game.h声明

运行时

*.布置雷

布置雷在mine这个数组布置,传参mine,定义EASY_COUNT,方便更改雷的个数,用while循环,布置成功一次雷,count--,当为0时退出;因为随机布置,范围为1~9,用rand函数,rand函数的范围为0~32767,所rand()%row之后为0~8,再加1;同时要判断这个位置是不是雷,如果不是雷再布置

rand函数:

rand函数生成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数的是无法预测下一个值是多少的。而rand函数是对一个叫“种子”的基准值进行运算生成的随机数。
之所以前面每次运行程序产生的随机数序列是一样的,那是因为rand函数生成随机数的默认种子是1;如果要生成不同的随机数,就要让种子是变化的
C语言中又提供了一个函数叫 srand,用来初始化随机数的生成器的;
程序中在调用rand函数之前先调用srand函数,通过srand函数的参数seed来设置rand函数生成随
机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。
那也就是说给srand的种子是如果是随机的,rand就能生成随机数;在程序中我们一般是使用程序运行的时间作为种子的,因为时间是不断变化的;同时需要stdlib.h和time.h这两个头文件

*排查雷

首先输入的坐标要合法,如果是1就被炸死,同时打印雷的布置情况,退出游戏;如果是0,打印周围的雷的个数用函数GetMineCount实现,因为雷是‘1’,不是雷则为‘0’,所以加以来就是雷的个数;当一次为0,win从0++,当win=总共的个数减去雷的个数,则扫雷成功

因为字符‘0’的ASC||为48,'1'为49,所以‘1’-‘0’=1;‘2’-‘0’=2

*.总

test.c

game.h

运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值