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

本文讲述了如何在编程扫雷游戏中,通过改变二维数组的元素值,将其转换为符号并在界面上显示,包括使用switch结构处理不同元素值,加载并显示相应图片,以及通过加密实现初始雷区的空白状态。
摘要由CSDN通过智能技术生成

我们首先呢,先来回顾一下我们上节课的内容。上节课的话呢,咱们主要的内容是通过去改变咱们二维数组的一个范围,加入咱们的辅助区。为什么要加辅助区呢?原因是咱们在根据雷的分布去填充数组元素的过程当中呢,我们会发现在我们这个数组里面,在我们游戏区里面啊,有一些元素,它是在角上,或者是在边上,那么它没有九宫格,所以我们是用了一个扩大数组范围的方式去处理它。

那么我们今天要讲的内容是我们怎么样把这些数据给它填充成我们的一个界面。

我们一步一步来啊,一步一步来。

那怎么做呢?首先,在讲这个之前,我先给大家看一下我们今天的另外一个代码啊。这个代码呢?只有21行啊。

我们来看一下这个代码,这个代码呢,首先先是一个二维数组,然后在主函数当中呢,咱们用for循环去打印这个二维数组里面所有的元素啊。那么这个很简单,我们来运行一下,给大家看一下。

那大家就可以看到我们可以把这个二维数组当中的这些元素呢,一个一个的给它打印出来。但是我们在做扫雷的过程当中,实际上我们看到的并不是一些数字,而是各种各样的图片。

那么这个东西怎么做呢啊?咱们先来看一下,比如说现在我不想去打印这些数值,那么我就可以在打印的过程当中,我们用一个if或者咱们直接用一个switch,用一个分支结构啊,去接收咱们的map[i][j]这样的一个数值。然后在这里面呢,它有一些元素,比如说case 1,也就是说我们找到这个数组当中为一的元素,我们给它输出啊,我们可以输出一个符号。比如说输出一个什么符号呢?输出一个@。然后咱们在后面呢,我们的case 2,case 3,case 4,case 5呢,每一种元素我们都可以用不同的符号去表示它。

我们来看一下,我们来运行一下调试,开始执行。

那么这个时候大家就看到我们把刚才的这个数组当中的一二三四五啊,通过一个switch,去改变成什么?改变成各种各样的符号。那么这些符号呢,大家一定要注意,这种符号是我们在写编程的时候可以直接去使用的。而且每一个不同的元素,它所对应的符号。是不一样的。请大家记住这一点。

那么这个时候我们就可以在我们的这个扫雷的程序当中,既然有符号,那咱们就把符号转换成图片。我们得来加上一个头文件include graphics.h。这是一个图形界面库。

我们加上这个图形界面库之后呢,我们就可以来做一个事情。注意IMAGE,它是一种类型,这种类型呢,它是可以用来存放图片的。那你比如说我们有多少种图片呢?我来给大家准备了一些素材啊,一共有11张图片,加上零十二张,所以我们在这里呢,来定义一个12的一个数组,那这个image的数组呢,它可以存放12张图片。

当然这里只是定义啊,咱们得来给它赋值,在我们的主函数里面,我们就可以来加载图片。

loadimage这些函数,大家可能没有见过,没关系,我来给大家讲。img呢,它是从字面意思上面来看呢,它是一个加载图片的一个函数。那么里面呢有一些参数,比如说img [0]。img [0]是我们这个图片数组的第一张小图片,那么我们要去找到啊,我们的0.jpg,这是一张图片。那么这张图片的大小,咱们给多大呢?这些图片,它都是正方形啊,咱们在这里呢,来定义一下咱们的一个宏定义,把我们的图片的大小呢,比如说改成20或者改成50。我们先改成50,大一点,让大家能够看得清楚啊。

那么,改成50,也就是说我们这里给定一个50。什么意思呢?就是说啊,这个函数它是加载一张图片。加载哪一张呢?加载这一张0.jpg。那这张图片加载进来之后,我要保证它的大小,宽度为50,高度为50,它是一个正方形。然后我们要把它保存到这个数组当中的第一个元素里面去,所以这个函数的意义很简单,把0.jpg这张图片以50×50的大小,给它保存到img [0]里面去就可以了。那么,同样的,我们一共有12张,这里我们是可以用循环去做的啊,但是呢,这个不是我们的重点,我就随便复制一下好吧,咱们来改一改。

这里面的话呢,大家一定要注意的是,0.jpg其实它是一张数字零的图片,1.jpg是一张数字为一的图片,零到八都是一些数字的图片,那九是什么图片呢?我们可以来看一下。

九是一张雷。然后呢,十是我们的一个空白图片。那11呢?它是我们的一个标记图片。这就是所有图片,一共有多少张呢?一共有12张图片。那么,通过我们前面这个东西来讲,我们有五种符号,我们需要五种元素,就是需要一些条件判断嘛。那么我们需要有12种符号,或者说12种图片,那么我们怎么办呢?

咱们就得来想清楚。比如说我们数组的元素为零,那么它所对应的图片,我们就给0.jpg嘛,就是image [0]这张图片。那么同样的往下面走呢,零到八,这些都是咱们的数字图片。那除了零到八之外呢,我们可能还有负一。负一是什么呢?负一是咱们的雷。所以它给定的就是咱们雷的图片。

我们来调试一下啊。(注意:easyx图形界面只能在cpp文件使用)

现在在我们这个程序里面呢,它只有负一,零到八这些元素啊。那么,如果说我们需要有空白,需要有标记的话,我们必须要让它在这里面产生一些新的,我们没有过的东西。那比如说我在这里呢,把19到28这个区间全部给它作为咱们的空白图片,也就是image [10]。然后我们把大于30的数呢,给它一个标记的图片。

这些数值从哪里来呢?我们后面会讲到。首先我先来讲一个东西就是负一。它如果说加一个20,它就应该会等于19。0-8加一个20,它就应该会等于多少呢?等于20到28。那也就是说,如果想要去显示空白的图片,我们只需要让我们的数字零到八或者负一,都给它加一个20就可以了。

那么,我们在后期玩游戏的过程当中,只要我们去点击空白图片,我让这个空白图片所对应的这个元素减一个20,它就会回到负一,零到八的状态,那它就会贴出数字和雷的图片。所以呢,请大家先记住我们的元素。

元素里面零到八对应的是数字,-1对应的是image [9]。19到28对应的是image[10],大于30的话对应的是image[11]。好,那么有了这个东西之后呢?其实我们在打印数组的时候,只要用一个switch,或者if。我们就用if。

如果说我们的这个map[i][j],它是等于负一的,那这就是雷。那么我们只要在这里面贴上雷的图片。那怎么去贴呢?putimage。但是大家要注意的是,

我们在这个图形界面里面都是以坐标为方式的,所以呢,我们在贴图的时候要用一个i- 1乘以咱们的SIZE,就是咱们的图片的大小。第二个呢?咱们要用一个j- 1乘以咱们的SIZE。在这个位置,咱们去贴出雷的图片image[9]。那这就是咱们雷的图片啊。

那else if,如果说map[i][j]大于等于零啊,并且咱们的map[i][j]小于等于八的话,那这是咱们的数字图片。那大家要注意啊,数字图片里面,它有从零到八。那么,这个零到八呢,它正好是咱们map[i][j]的值,所以我们在贴图的时候,只要把这个img这个数组的下标,换成map[i][j]就可以了。

然后呢,再往下面走,我们只要保证map [i][j]大于等于19,并且map[i][j]小于等于28,那么,这就是咱们所谓的空白图片。注意一下,空白图片。

空白图片是哪张呢?我们前面已经讲过了,是咱们的第十张。然后再往下面还有一个else if,就是如果说我们的这个map[i][j],它大于30,那么这个就是咱们的标记图片。标记图片是哪张呢?第11张。

我们的负一对应的就是img [9],对吧,零到八的时候,咱们对应的是数字,那19到28呢,是咱们的空白。那img[11]大于等于30的话呢,就是咱们标记的图片。那么这个时候,我们只需要在主函数里面给上一个咱们的界面啊。

我们先在这里面呢,给上一个initgraph,给定一个窗口。这个窗口多大呢?大家注意我们有多少行?ROW行。每一行的坐标是SIZE的大小。然后我们的列呢,

有COL列,每一列呢,也是SIZE的大小。所以我们给定这么一个界面,然后我们把这个控制台呢,也给它显示出来。当然我们得在下面加上一个while(1)防止它闪退啊。

我们来给个分号运行一下。那么这个时候呢,我们就可以得到两个窗口,一个窗口呢,是咱们的控制台窗口,一个呢,是咱们的这个游戏的窗口。

我们得到这个窗口之后,我们来调用这个GameDraw之前,我们还要把图片加载进来。咱们把图片,全部给它复制一下,给它放到咱们这个程序的根目录里边(选择文件资源管理器中打开文件夹),给它粘贴到这里来。然后我们再来调试,开始执行啊。

那这个时候大家就可以看到,控制台的这些数字呢?如果是零的地方,咱们就是零,如果是一的地方,咱们就是一,如果是雷的地方,咱们就是雷。(貌似行和列搞反了)

那么当然,我们的一个扫雷游戏,最开始的时候肯定不是这个样子的。我们最开始扫雷点出来的时候,它全都是空白。那很简单,我们只需要在我们游戏的初始化里面,根据雷的分布,填充完数组元素之后,咱们在这个地方对它进行一个简单的加密。

咱们把这个游戏区的数据呢,给它通通的加一个20,map[i][j]加等于20,那也就是说我通过这个简单的加密,把我原来的负一的地方变成了19,把零的地方变成了20,把一的地方变成了21,把八的地方变成了28。

那么他就正好在咱们这个打印函数里面符合这个标准。它一旦符合这个标准,符合这个条件,那么它贴出来的就是空白图片。咱们再来运行一下。

而且在咱们的这个数组当中,大家也可以看到,其实我们是可以去区分的。因为他都加了一个20,那么这个20就是一个零,这个21就是一个一。那19呢?就是一个雷。好吧,那么我们简单的总结一下,就是说我们这节的话呢,主要就是说我们怎么样把二维数组当中的每一个元素所对应的符号,给它贴入到咱们的这个界面里面来。

这一节的内容有点新鲜啊,大家需要自己去消化一下啊,下一节的内容呢,会更清楚,会更好一点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值