一、前言
本文详解如何使用C/C++完成扫雷游戏的开发,使用的依旧是EGE库,需要自己提前配置好。
不会配置的可以参考这两篇文章:制作推箱子小游戏、引入EGE库。
如果已经忘了扫雷游戏的规则,可以自己先玩一玩:扫雷。
和以前写过的其它游戏一样,它依旧是一个二维游戏,所以第一时间依旧是想到用二维数组来表示游戏逻辑。
大体运行逻辑如下:
- 使用二维数组保存每个格子的相关信息。
- 每次点击执行相关的行为,实际上都是在操控这个二维数组。
- 将二维数组实时绘制到屏幕上。
项目源码可以自行到文末获取,本文属于进阶内容,只讲解一些要点、难点。
最终成品的效果如下:
二、代码概述
代码一共250行左右,并不多,这里简单看一下结构:
整体可以分为三个部分:
- 结构体、枚举:用于表示游戏中的相关数据信息
- 图片:用于绘制到屏幕的资源
- 函数:游戏的执行逻辑
其中结构体与枚举、以及图片,直接在这里简单说一下就行了。
首先是结构体Point
,这是为了方便代码使用,用于存储x、y坐标的,没有其它内容:
然后是最重要的Cell
结构,它被用来表示一个格子,因为扫雷游戏分解下来,其实就是二维数组嘛,每一个点都可以将其看做一个格子,也就是这个结构体:
这个结构体中存放着两个东西,其一是状态:
这里的unknow
就是没有打开时的状态,open
就是打开后的状态,还有排雷的exculde
状态,以及点到炸弹后的爆炸状态blast
。
这些状态都是为了方便后面绘图时知道应该给这个格子贴什么图片。
其中open
状态下,就需要显示这个格子里面的内容了:
实际上就是雷和数字,其中数字为0一般用空来表示。
由于C++中结构体和类基本一致,所以我这里还给它写入一个构造函数,方便使用。
这部分的内容如果不理解的可以参考下面几篇基础文章:
然后就是图片,这个newimage
函数以及PIMAGE
类型都是EGE库提供的,让我们可以很方便的加载图片到这些对象里面,然后就可以将加载后的图片往屏幕上贴。
加载图片的代码放在了init
函数中,后面会讲解的。