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