4.2 引擎的实现
我们现在开始对这些类进行开发,首先要编写的是CGameEngineBase类。在现在的阶段,不必担心这些类是否具有意义。在本章的后文中将使用该引擎创建一些示例。以后我们有机会利用该引擎创建复杂的操作,所以在示例游戏中所用的代码尽量简单。
4.2.1 CgameEngineBase类
下面对CGameEngineBase类的大概情况进行介绍:
● 目标 游戏引擎的核心;为管理游戏及其中的对象提供函数。
● 类型 抽象基类。
● 父类 非继承类。
● 子类 特定图形API的游戏实现,例如GDI引擎。
● 主要功能
● Prepare 为引擎初始化数据。
● Reset 为一个新游戏初始化数据。
● Advance 步进游戏中的所有元素。
● Update 更新游戏状态。
● Render 绘制游戏。
该类被创建为抽象类;我们不会为该类创建实际的实例,因为它没有包含足够的功能来支持我们的游戏开发。但是,它将成为一个创建GDI游戏类与OpenGL游戏类的构建块(实际上将来还可以应用于其他渲染技术)。
因此我们会提供一套核心函数集,所有从它继承的游戏引擎都要实现这些功能。并且提供一套虚函数集,使得各种继承类能对这些虚函数用自己的方式进行重写以执行特定任务。
所有继承而来的引擎类有一些东西是通用的,即要对游戏运行窗体进行访问。可能需要检测窗体的尺寸来判断游戏元素是否即将跑到边界上,或者要访问窗体中的控件是否位于窗体内。
为了保证总有一个窗体可用,我们为该类创建带有参数的构造函数,将所需要的窗体信息传递进去。该类一开始非常简单,如程序清单4-1所示。
程序清单4-1 最初的CGameEngineBase类
namespace GameEngineCh4
{
public abstract class CGameEngineBase
{
/// <summary>
/// Store a reference to the form against which this GameEngine
/// instance is running
/// </summary>
private Form _gameForm;
/// <summary>
/// Class constructor -- require an instance of the form that we will
/// be running
/// within to be provided.
/// </summary>
/// <param name="gameForm"></param>
public CGameEngineBase(Form gameForm)
{
// Store a reference to the form
_gameForm = gameForm;
}
}
}