老一套做一个简易的游戏菜单,并且完善他的功能,选一开始游戏,选0退出游戏,超出就重选。
目录做完开始实现游戏内容,先做一个棋盘来放我们的雷和我们排查雷的情况,但是在一个棋盘上既要放雷,又要来存放我们排查的雷,完成起来就很乱,那么我们是不是就可以做两个棋盘,一个来专门放雷,一个专门来放我们排查的雷,这样写起来即简单又方便观察,创建两个字符数组,mine就是专门放布置的雷,show就专门来放排查的雷,我们把mine里头全放‘0’在show里头全放‘*’,
虽然我们要创建的棋盘是9*9的棋盘,但是扫雷游戏规则是:根据一个坐标的周围八个坐标来判断雷,那么问题来了,如果这个坐标从最边缘展开,你就只有5个坐标了,剩下的三个坐标就是非法的,就会越界,所以我们要避免越界,那我们多创建一行一列不就好了。(这里我是在头文件里定义的,不建议在一个文件里写这个游戏,多用多文件写代码,短的就不需要了)
初始化棋盘的函数创建好了,下一步实现这个函数。i 就是行 j 就是列这个棋盘就是 i 行 j 列大又因为我们创建的是两个棋盘,那么为什么不让程序自己去根据‘0’和‘*’,来创建棋盘呢?我们只需要把‘0’和‘*’传给他就行了,让他用形参set来判断
棋盘创建好了,下一步让我们把棋盘打出来看看效果。用DisplayBoard来打印棋盘。给它传mine,就是雷棋盘,传show就是排查雷棋盘。创建好了,看完记得把雷的棋盘注释了哦,这个是不能给玩家看的。
下一步实现打印棋盘,创建变量 i 和 j 分别代表行和列,虽然我们创建的是1010的棋盘,但是玩的时候只是在99的棋盘上,所以创建的是1~9行,1~9列。虽然这样棋盘是打印好了,但是玩起来太困难,你没办法一眼看出来这是几行几列的坐标,所以我们在打印行的时候在最前面打印一下是第几行,同理在棋盘的上面去打印他的列,记得换行和加分割线,不然达不到预期效果。
棋盘打印好了该布置雷了,创建一个雷的函数来实现布置雷,同理可用打印出来看看有没有布置上雷,看完注释,不然就作弊了
布置雷首先两个要求,一、你想布置几个可以控制,二、这个雷得是随机布置的,所以我们创建一个循环,假设我们有十个雷,我们布置一个减一个,直到布置完了,雷变成了0, 0为假循环就停止了,我们用rand()函数生成随机数,%上一个row就是0~8的范围但是我们需要的是1~9,所以+1就能把范围控制在1~9.
雷布置好了,该去排查雷了。一样先创建一个排查雷的函数下面去实现它,排查的时候我们要用到雷的位置信息,所以雷的数据也要传给它哦。
排查雷的第一步,你要提示一下玩家可以输入坐标了,然后创建变量x,y表示横坐标和纵坐标并存储,创建完了我们要判断一下,这个坐标是不是在棋盘内的,如果不是就说明你输入的坐标越界了,提醒他坐标越界,重新输入因为需要重新输入那肯定是循环。如果坐标在棋盘内先判断你踩到雷没,毕竟这是游戏开始的第一步,你都凉凉了后面的东西也就没用了,如果我们的输入坐标里头是我们随机生成的雷,那么恭喜你开启下一把,输了也得输得明白不是,输了把雷棋盘打印出来给他看一下,那要是没凉凉,就得告诉一下人家周围有没有雷,有几个雷,这里我们创建一个GetMineCount函数来实现,现在我又觉得一次只能排查一个坐标太累了,那么我们可不可以优化一下,如果我们选的坐标周围八个坐标都没有雷,是不是可以都给我消除了,又可以省下很多时间,这里我们创建unfold函数来实现,你输入好坐标了得看的到吧,所以要把排查棋盘打印一下,最后你玩了这么久得有个获胜标准吧,我们这里用win来判断你有没有获胜,如果win小于棋盘的坐标数量减雷的个数,那么说明还有空位需要继续游戏,如果win等于棋盘的坐标数量减去雷的个数,就说明除了雷没有空位了,那么就是雷排完了,恭喜你获胜。
下面就是该实现一下显示雷的个数这个函数了。假设x,y就是你选择的坐标,那么他周围的八个坐标就是如图所示,那么判断周围有几个雷就很简单了,前面我们将雷设置为‘1’不是雷为‘0’,那么我们就先不管他是个字符,我们把他想象成数字1和数字0,那不就是普通的加法了嘛,因为每个字符都得减个字符零才能转换成数字,所以我们把周围的八个字符一加,减去8*‘0’就得出了雷的数量。
最后还剩个展开函数没有实现,这里我们用递归来完成,为了简便我们把GetMineCount函数传给input,用input来接收它的数据取地址win然后win++,如果input的值等于0,说明周围没有雷,我们给0赋值为空格(看着好看),向周围的八个坐标展开,这八个坐标要大于0小于我们的行和列。如果周围有雷,input不等于0,我们就把雷的数量转换成字符显示在show数组上。
最后附上完整代码分别是游戏框架,游戏内容,头文件(小白出没,大佬见谅)
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
Sole purpose of using concurrency is to produce scalable and faster program. But always remember, speed comes after correctness. Y…