用c语言写一个简易的扫雷

想写一个程序,我们应该先想一下我们应该如何设计这个程序。

我们要做扫雷,按照我们对扫雷这个游戏的认识,我们应该有一个棋盘。在有一个棋盘的基础上,我们也应该有雷,这个雷要随机分布在棋盘上。我们有了雷之后,要去找雷,玩过扫雷的都知道,如果我们选择的一个位置是没有雷的话,这个位置上会显示它所在的九宫格中雷的个数,方便我们继续查找,避免碰到雷。如果碰到雷游戏会直接结束,并选择是否还要在进行游戏。

首先,我们做扫雷要有个进入页面我们每次游戏结束会重回这个界面,所以我们应该用循环去写do while循环写,会先执行再判定,a的输入放在循环内,可以多次玩这个游戏。游戏和进入页面我都放进了game()和menu()函数中,使代码更简洁明了。

做完界面后,我们应该去做棋盘。棋盘是一个平面,数学上两条直线可以定义一个平面,自然而然想到了二维数组。在一个简易的扫雷中,我们可以自己思考要多大,在这我以9*9的为例。,为了方便以后更改我先定义横长为Row,竖长为Col应为是9*9的棋盘,所以我定义成9。我们还要思考一点,我们以后要查找九宫格中的雷,但数组只有9*9会有无法查找的地方,系统会报错,所以我定义Rows为Row+2,Cols同理。然后在创建两个数组,一个mine为雷的数组,另一个show数组,在表面看的。我们用char数组来实现,方便雷和表面的布置。

在game函数中我们再创建一个initboard函数用来表示初始棋盘。在()中放入我们需要的参数,我们放入一个数组,数组的行,列,还有我们数组要初始化的相应字符,我给mine数组中初始化都为‘0’,这里埋个伏笔。给show初始化为‘*’。为了初始化的完成,我们用两个循环,分别用于行,列的初始化。初始化一行后打印个\n来使各行隔开。当然,为了能够更清晰的观察行列,我们再把,行列打印出来。

将棋盘打印出来后,我们就应该考虑如何设计雷。rand()这个函数表示随机数,但深入使用就知道,rand()函数只能随机一次,为了让它每次都能随机,我们要使用srand()函数使其随机,在括号里添加time函数使其完全随机。rand函数很大,我们%9再加1,这个数就再1-10之间了。

能够随机后,我将雷设置成‘1’,这也是个伏笔,马上能用到。

设置完雷,我们要考虑如何去找雷。我们通过几行几列来确定我们要找的地方,如果这个地方是雷,我们就失败,如果不是雷,我们继续找,它还会提醒我们周围有几个雷。当我们找完所有的雷后就胜利。

输入行列,这里我将x,y反过来的原因是,数组中行其实对应的是y轴,列对应的是x轴,所以反过来填入数组中。当win减到0时,不在进入循环,进入下面的if语句,然后打印胜利。

之后就时找九宫格中其余雷。我们可以直接将数组九宫格中的其余字符相加,再减8个‘0’,就可以表示九宫格中雷的数量。前面伏笔就在这揭晓。我们知道,字符中数字有相应的ascll码值,九个相加,再减8个0的ascll码值就是另一个数字的ascll码值,表示九宫格中雷的个数。我们也可以用循环写,这样比较容易出错,一开始我也出错了

写完这个,我们就将整个扫雷写完了,在这里我希望初学者能够一步一个脚印,写一部分,验证一个部分,防止bug找不到之类的问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值