4.2 引擎的實現(xiàn)
我們現(xiàn)在開始對這些類進行開發(fā),首先要編寫的是CGameEngineBase類。在現(xiàn)在的階段,不必擔心這些類是否具有意義。在本章的后文中將使用該引擎創(chuàng)建一些示例。以后我們有機會利用該引擎創(chuàng)建復雜的操作,所以在示例游戲中所用的代碼盡量簡單。
4.2.1 CgameEngineBase類
下面對CGameEngineBase類的大概情況進行介紹:
● 目標 游戲引擎的核心;為管理游戲及其中的對象提供函數(shù)。
● 類型 抽象基類。
● 父類 非繼承類。
● 子類 特定圖形API的游戲實現(xiàn),例如GDI引擎。
● 主要功能
● Prepare 為引擎初始化數(shù)據(jù)。
● Reset 為一個新游戲初始化數(shù)據(jù)。
● Advance 步進游戲中的所有元素。
● Update 更新游戲狀態(tài)。
● Render 繪制游戲。
該類被創(chuàng)建為抽象類;我們不會為該類創(chuàng)建實際的實例,因為它沒有包含足夠的功能來支持我們的游戲開發(fā)。但是,它將成為一個創(chuàng)建GDI游戲類與OpenGL游戲類的構建塊(實際上將來還可以應用于其他渲染技術)。
因此我們會提供一套核心函數(shù)集,所有從它繼承的游戲引擎都要實現(xiàn)這些功能。并且提供一套虛函數(shù)集,使得各種繼承類能對這些虛函數(shù)用自己的方式進行重寫以執(zhí)行特定任務。
所有繼承而來的引擎類有一些東西是通用的,即要對游戲運行窗體進行訪問??赡苄枰獧z測窗體的尺寸來判斷游戲元素是否即將跑到邊界上,或者要訪問窗體中的控件是否位于窗體內(nèi)。
為了保證總有一個窗體可用,我們?yōu)樵擃悇?chuàng)建帶有參數(shù)的構造函數(shù),將所需要的窗體信息傳遞進去。該類一開始非常簡單,如程序清單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;
}
}
}