11. C++实现扫雷

一、前言

本文详解如何使用C/C++完成扫雷游戏的开发,使用的依旧是EGE库,需要自己提前配置好。

不会配置的可以参考这两篇文章:制作推箱子小游戏引入EGE库

如果已经忘了扫雷游戏的规则,可以自己先玩一玩:扫雷

和以前写过的其它游戏一样,它依旧是一个二维游戏,所以第一时间依旧是想到用二维数组来表示游戏逻辑。

大体运行逻辑如下:

  1. 使用二维数组保存每个格子的相关信息。
  2. 每次点击执行相关的行为,实际上都是在操控这个二维数组。
  3. 将二维数组实时绘制到屏幕上。

项目源码可以自行到文末获取,本文属于进阶内容,只讲解一些要点、难点。

最终成品的效果如下:

image-20231127163611411

二、代码概述

代码一共250行左右,并不多,这里简单看一下结构:

image-20231127151251675

整体可以分为三个部分:

  1. 结构体、枚举:用于表示游戏中的相关数据信息
  2. 图片:用于绘制到屏幕的资源
  3. 函数:游戏的执行逻辑

其中结构体与枚举、以及图片,直接在这里简单说一下就行了。

首先是结构体Point,这是为了方便代码使用,用于存储x、y坐标的,没有其它内容:

image-20231127151554360

然后是最重要的Cell结构,它被用来表示一个格子,因为扫雷游戏分解下来,其实就是二维数组嘛,每一个点都可以将其看做一个格子,也就是这个结构体:

image-20231127151720533

这个结构体中存放着两个东西,其一是状态:

image-20231127151833318

这里的unknow就是没有打开时的状态,open就是打开后的状态,还有排雷的exculde状态,以及点到炸弹后的爆炸状态blast

这些状态都是为了方便后面绘图时知道应该给这个格子贴什么图片。

其中open状态下,就需要显示这个格子里面的内容了:

image-20231127152105567

实际上就是雷和数字,其中数字为0一般用空来表示。

由于C++中结构体和类基本一致,所以我这里还给它写入一个构造函数,方便使用。

这部分的内容如果不理解的可以参考下面几篇基础文章:

  1. 结构体、类、接口
  2. 结构体
  3. 枚举与枚举类

然后就是图片,这个newimage函数以及PIMAGE类型都是EGE库提供的,让我们可以很方便的加载图片到这些对象里面,然后就可以将加载后的图片往屏幕上贴。

加载图片的代码放在了init函数中,后面会讲解的。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux