16.使用EGE库完成游戏

一、前言

前文篇幅较长,主要就是介绍如何引入EGE这个开源库。

当然,重点是理解为什么要引入第三方库:我们不想浪费时间重复开发具有与之相同功能的代码。

这些东西,只要你日后学的稍微深入一些,其实自己也是可以写出来给被人用的。

二、EGE基本使用逻辑

前面我们通过以下代码来引入EGE库:

#include"include/graphics.h"
#pragma comment(lib,"graphics64.lib")

然后通过简单三个函数实现来使用该库(实际上就用到了第一个函数):

initgraph(805, 630); //初始化窗口的属性
getch(); //让程序在这里停止,直到用户按下任意一个按键,才继续执行
closegraph(); //关闭窗口

在使用别人的库时,基本的学习过程就是先了解这个库的用途,以及如何初始化这个库。

只要这步骤没问题,后面的就仅仅只是花时间不断地了解这个库有哪些函数、以及如何使用了。

从这我们也能看出来函数的重要性,因为到目前为止我们根本不知道这些函数里面是怎么实现的,但一调用就有这个效果,是不是很爽!

执行完初始化后,我们就得到了一个类似于画布一样的东西,它就是前面我们运行所看到的一个黑窗口。

而我们接下来的目标就很简单了:将游戏地图映射到窗口上。

比如,我们现在就要把具体的数字6,映射成窗口上的角色图片。

三、下载游戏素材

所以首先我们就需要游戏的图片素材,我在这里已经为大家准备好了。

可以点击这里进行下载。

下载解压后,得到下面一系列图片:

image-20230912164618530

同时注意到,这些图片的大小均为35*35

前面我们初始化窗口大小时填入的长宽为805和630,相除可得最终我们的游戏地图大小为23*18格子。

显然这会被比我们的游戏地图更大(10*12).

但这个是无所谓的,超出的地方填空地即可,这可以让游戏整体看起来更加空旷。

事实上推箱子原游戏中,墙外面也有很多空地,这方便后续扩展更大的地图。

同样的,我们也需要将这些图片复制到我们的项目目录中:

image-20230912165655809

为了方便,我这里就直接将其命名为img了,所有图片素材都放在这个文件夹中。

四、贴图片

有了图片,那么接下来我们就应该按着游戏地图数据来贴图片了。

EGE库给我们提供了一系列函数可以很方便的实现这一功能。

想要使用图片,首先我们就得先加载图片:

	PIMAGE imgspace = newimage(); //用来保存当前空地图片的对象
	PIMAGE imgplayer = newimage(); //用来保存当前人物图片的对象
	PIMAGE imgwall = newimage(); //用来保存当前墙图片的对象
	PIMAGE imgball = newimage(); //用来保存当前目标球图片的对象
	PIMAGE imgbox = newimage(); //用来保存箱子图片的对象
	PIMAGE imgboxin = newimage(); //用来表示当球进入箱子的图片对象

	//加载图片,并保存到对应的对象中
	getimage(imgplayer, ".\\img\\mario.bmp");
	getimage(imgbox, ".\\img\\box.bmp");
	getimage(imgwall, ".\\img\\wall.bmp");
	getimage(imgball, ".\\img\\slball.bmp");
	getimage(imgboxin, ".\\img\\boxin.bmp");
	getimage(imgspace, ".\\img\\space.bmp");

首先我们需要一个保存图片的对象,这个对象的类型为PIMAGE,由newimage()生成并返回的。

你可能会问,我怎么知道它的返回值为这个类型?这个很简单,你把鼠标放在这个函数上就能看到了:

image-20230912170709212

它前面还有个ege的名字,这个是C++中的内容,叫做命名空间,暂时来说我们不用管它。

然后呢,我们就可以再调用getimage函数来加载对应的图片,并将其存放到起这个图片对象中。

它有两个参数,第一个参数就是用来保存加载完成后的图片的,而第二个参数就是我们想要加载的图片路径。

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