大家好,我是码哥,今天给大家带来的是一款经典游戏——扫雷,扫雷这个游戏相信大家并不陌生,它需要你输入一个坐标,如果这个坐标是雷,那么就会被炸死,如果不是雷,那么就会显示该坐标周围的雷的信息。下面就带大家写一个扫雷代码。
1.首先,我们需要打印出来一个菜单,可以用一个函数来表示,并且用一个函数来表示选择是否要扫雷
例如:
2.其次,我们需要创建两个数组并且将两个数组初始化,例如我们用一个mine数组用0表示没雷,1表示雷;在用一个show数组用*表示没雷。
代码:
打印出来的效果
注意:在打印棋盘和创建数组时,你的数组要比你所展现的棋盘大一圈,也就是说需要你创建的数组的大小要在你的棋盘的基础上行和列都加2;这样可以避免越界访问等一系列问题。比如:你要选择边缘的一个坐标,但是它无法统计不在棋盘范围的坐标是否有雷。
3.然后就到了我们的核心环节之一—埋雷;我们要想埋雷就不能有规律,所以我们需要用到随机数,我们可以用rand函数来实现创造随机数,但仅仅有一个rand还不够,因为这个rand函数给出的值是有规律可循的,这时候就需要我们用到srand函数以及时间戳。
具体细节如下:
我们每扫一次雷,我们只需重置一次随机数,这里的count表示我要埋的雷的个数。
4.埋完雷之后就可以开始排查雷了,这里排查类可以用Find_bone()函数来封装一下,在排查雷时,我们需要输入一堆坐标,可以用x表示行,y表示列,将两个数组以及棋盘大小进行传参,我们要写一个循环来表示我们需要输入几次坐标才算排完雷,这个排雷的次数可以是(棋盘的总个数)-(埋进去的雷的个数),这里可以用do while循环表示。
(1)循环里首先需要判断输入的坐标范围是否正确,如果不对就需要提醒用户输入正确的坐标范围。
(2)范围正确就需要判断输入坐标的位置是否是雷。
(3)如果是雷就被炸死(这里可以用mine数组里的数据判断);
(4)如果不是就需要计算该坐标周围的雷的个数,这个有两种方法:
(5)一是将该坐标周围的八个坐标的元素加起来减去八个字符0,最后再将得到的这个数字加上一个字符0,这样就能显示有几个雷(字符0-9的ASCⅡ码值都是连续的),并将show数组中该位置赋值为这个字符;
(6)二是利用一个循环,外层循环从-1到1,内层循环也是-1到1,在循环里将每个值加到你输入的坐标上减去字符0,最后在循环外将该数字加上字符0赋值给show上该位置。
每次赋值可以先判断这个位置的mine元素是否为1来避免重复输入导致输入的次数不足但是却提前结束,每次成功复制就能使次数减一,最后如果次数为0还没有踩到雷,就显示排雷成功。
今天的扫雷游戏就到这里,这其中有写的不好的请多包涵,感谢大家的观看。