扫雷游戏设计(从零开始)(5)

我们目前这个扫雷呢,已经进行到可以通过鼠标去点击啊,通过鼠标去对它进行一系列的操作,例如标记,取消标记。但是呢,大家会发现啊,其实在我们真正的扫雷里面的话,我们运行起来之后,当我们点到一个零的时候,它应该会成片成片的打开,那么这个就是我们这一节要讲的内容。

那么,我们来看一下,首先我们要记得啊,我们讲到的地方就是在我们的玩游戏的这个函数当中,当我们的鼠标点下去的时候,首先,我们要保证它点到的是空白。你只有点到空白的时候,我们才可以去打开它。那么如果我们点到的是空白图片,但是当我们点进去之后,我们发现这个值,它是等于20的,说明什么?说明咱们现在点到的是一个零啊。我们怎么办呢?首先,我们如果说点到的是零,其实我们就可以很清楚的知道在这个零的周围呢,它是一个九宫格。我们可以来画一下简单的画一下啊。

我们得到这个九宫格,都知道这里面怎么样,应该全部都不可能是负一,它有可能是啊二,有可能是三,有可能是一,有可能是零。那么当我们得到这个零之后,我们可以去遍历它的这个九宫格,去把这些九宫格全部都打开。但是呢,我们这里点开左下角的零,我们应该把它周围都打开。但是当我们打开这个地方,右上角其实它也是零,我们也可以把这个零的九宫格给它打开。当打开这里,又发现一个零。那么现在的话呢,我们在这个零里面呢,我们又打开一个零,我们又可以来遍历这个零的九宫格。所以遍历零周围的九宫格这个东西,它既可以作为一个函数的主体,又可以在这个函数当中继续去围绕另一个零继续打开。这个呢,就有点像一个递归。

所以呢,我们来写一个递归的函数,我们用一个void ,给它一个OpenZero啊,打开零。我们把这个函数啊,给它放在咱们玩游戏的这个函数前面。我们知道,当我们点到的是20的时候,我们应该怎么办?我们应该调用这个OpenZero这个函数。相反的,如果说它不是,咱们就直接打开,把count加加。所以在这个函数里面,我们应该做什么呢?首先第一个,咱们调用这个函数呢,不管它是不是零,咱们得先翻开这个格子。咱们先在这个函数里面加上两个形式参数啊,咱们用一个int r和int c。那么这里的话呢,咱们先把这个r和c呢给它带进来,让它减等于20。

我们在玩游戏函数这里面也是一样的,把这个r和这个c呢给它带进来就可以了。

首先我们先把这个零给它打开,然后,咱们有一个count加加,千万不要忘记啊。那么,我们的这个count加加以后,我们应该干嘛呢?那咱们得想清楚了。咱们打开之后,咱们得去遍历这个九宫格嘛。那首先第一个for循环,咱们来定义一个int类型的m=r- 1;m小于等于r+1;然后m加加。第二个for循环,咱们定义一个int类型的n=c- 1;n小于等于c+1;然后我们的n加加。

那么,在遍历这个九宫格的过程当中,大家一定要注意,现在咱们来做的东西呢,是与零有关的,那我们的辅助区呢?辅助区都是零,所以这个辅助区咱们不能动。所以呢,咱们首先得保证它是属于咱们的游戏区的,也就是说咱们的m呢,必须要大于等于一,并且呢,咱们的m要小于等于ROW。ROW是十啊。咱们的n呢,要大于等于一,小于等于COL,保证咱们现在遍历的这里面呢,它是咱们的游戏区的内容。保证它是游戏区里面内容之后呢,它还应该是空白的图片,不然咱们不能去翻开它。就是说咱们的map [m][n],它必须大于等于19,并且咱们的map[m][n]应该小于等于28。

注意啊,第一个,它是咱们的九宫格。第二个,这个九宫格呢,它去遍历的过程当中必须是咱们游戏区的内容。第三个,就是我们在遍历的过程当中,我们想要去翻开,那你不能随便去翻啊,你必须翻空白的。在这些空白的当中,我们再去考虑,我翻出来的,到底是不是零?如果说不是0, map[m][n]不等于20的话,咱们直接给它翻开就OK了,减等于20。然后让count++。相反的啊,如果说我们翻开的是零啊,那很简单,咱们再调用一次这个函数,把m和n给它带进来。这样呢,实现我们的一个基本的递归。

那么这个时候呢,我们再来调试执行。

大家就会发现,当我们点到零的时候,它可以把咱们所有零通过一个递归不断的去把能够确定不是雷的地方,全部给它打开,那这个时候我们再去写的话呢,就很简单了。

那么我们整个程序就结束了啊,整个就结束了。我们再把我们的SIZE变小一点,行数变多一点,50行。多少列呢?30列。多少个雷呢?100个雷。

我们在加载图片的时候不要用50啊,最好把这个50换成SIZE啊。

我们在写程序的时候,能够用宏定义的,能够用全局变量的啊,尽量用,不是全局变量就是静态变量啊,常量不能够改变的。

我们如果说想要去改变咱们这个程序的难度,可以直接改变ROW,COL和NUM的值。

然后呢,我们还有一个就是咱们可以带上一个start.mp3,然后我们就可以来加上#pragma comment,特别像咱们多媒体设备接口的一个库文件。winmm.lib。

然后呢,我们只要在主函数里边,打开窗口之后,我们把mciSendString这个函数带进来,我们在这里面就可以去写一些,比如说我们就可以写一个open start.mp3这首音乐。打开之后干嘛呢?打开之后我们给它取一个别名叫做music1。那后面的话呢,咱们给上三个零。这是打开这首歌曲啊。我们打开这首歌曲干嘛呢?我们是想要去播放它。那么我们就只要直接play music1就可以了。

各位同学,那这就是咱们整个扫雷的过程啊。

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值