1.前言
本项目可以看作是本站另一门入门教程《C语言:推箱子小游戏》的进阶教程。
如果本文看起来过于困难的话,可以尝试先去阅读基础版本的,里面介绍的会更加详细。
项目整体演示可以观看视频:推箱子小游戏项目演示
2.项目准备
还是老规矩,先在原解决方案中,新建一个项目,项目名为:day5--BoxMan
,设置为启动项,并添加一个main.cpp
的文件:
既然是写游戏,用控制台肯定不行,太难看了,同时为了兼顾从没有接触过图形编程的新手,所以我打算采用EGE图形库
。
这个库的使用非常简单,体积也很小,非常适合新手学习,下载地址:Easy Graphics Engine。
然后点击下图所示进行下载:
下载并解压后如下图:
将include
文件夹和graphics64.lib
拷贝到今天的项目中:
然后回到项目,写下代码,运行一下,不报错即成功:
#include"include/graphics.h"
#pragma comment(lib,"graphics64.lib")
int main() {
}
自此,我们的准备工作就完成了!
下面,我开始对上面的步骤进行解释:
- 首先,为什么我只复制
include
文件夹和VS2019
文件夹下的graphics64.lib
?
因为include
文件夹下是ege
库的所有头文件,就和我们使用C/C++的头文件iostream
一样,既然我们要使用它,就必须得包含它。
而之所以使用VS2019
下的库文件,只是因为ege
目前还没有更新VS2022
版本,只能暂时用VS2019
凑合,但区别也不大。
至于其它文件夹中的内容,主要是一些使用该库的示例,以及其它开发环境用的库,有兴趣的可以自己看一看。
include
是头文件,前面学过我明白,那graphics64.lib
是什么东西?
这个文件被称为静态库,前面我们提到过,一般我们写函数或者类的时候,都是将声明与定义放在同名的两个文件里面,一个叫做头文件,一个叫做源文件,这样如果别人想要使用我写的代码,就可以直接把这两个文件复制给对方。
但是这有一个问题,就是对方能看到我们写的代码!
如果是付费的产品,别人如果都拿到了你写的源代码,以后还会找你吗?直接自己改不就行了!
这种时候,我们是想让对方用,但我们又不能将源代码给对方,而这就可以用到静态库,它就像.cpp
文件一样,需要配合.h
文件使用。
但好处是,此时对方就不能看到你源代码了,因为你的源码都被打包成了.lib
的库文件!后面章节我也会教大家如何打包自己的库文件。
总结一句话就是:graphics64.lib
文件就是用来代替.cpp
文件的,要结合对应的.h
文件使用,而所有的.h
文件都在include
文件夹里面。
需要注意的是,由于我一直以来都是使用的x64
平台,这也是未来的趋势,所以选择的是x64
文件夹中的库文件,如果你非要使用x86
,那就请使用x86
文件夹下的库文件。
而使用这个库文件,就需要用该语句#pragma comment(lib,"graphics64.lib")
,如果是其它库,就换个名字就行了,这也没啥讲究,直接复制就行了。
- 代码中包含头文件的方式怎么这么奇怪?
这是由于VS默认是在当前项目文件夹中寻找头文件的,如果你的头文件在include
文件夹中,那就得先输入文件夹include
,然后vs
会自动给你弹出该文件夹下有哪些头文件,然后包含对应的头文件即可。
3.游戏属性
有了前面的准备,现在我们就可以开始写代码了,但首先还是要先确定一下我们目前的思路:
- 为避免过于复杂,我们只要一个游戏窗口,用来显示游戏就行了。
- 但我们还得有选择关卡,选择英雄,选择地图等功能,这一部分就直接用控制台完成。
所以我们的代码总体逻辑就是:点开游戏之后,可以通过控制台输入的方式来选择一些游戏特性,然后通过游戏窗口来显示游戏。
所以我们先来写一个显示选择属性的控制台界面函数:
#define SHOW_CONSOLE //必须定义这个宏在 ege的两个头文件前面,才能使用控制台
#include"include/graphics.h"
#include<iostream>
#pragma comment(lib,"graphics64.lib")
using std::cout; //输出
using std::cin; //输入
using std::endl; //换行,与 \n 类似
int hero; //保存用户保存的英雄
int pce; //选择用户保存的场景地图
void ChooseAttribute(); //游戏开始前,选择属性的函数