構(gòu)造函數(shù)將提供的gameForm對象的引用存儲在類級別私有變量_gameForm中。為了徹底對這些對象進行控制,我們將所有類級別變量的訪問類型定義為private,然后提供相應(yīng)的屬性供類以外的代碼進行訪問。因此,我們還需要添加一個屬性,這樣該基類以外的代碼也可以獲取對該窗體的引用。
我們將為該窗體對象提供一個公共的只讀屬性。由于是屬性被設(shè)置為公共的,因此本引擎程序集中以及其他外部游戲程序集中任何從這里繼承的類都可以訪問該窗體對象,如程序清單4-2所示。
程序清單4-2 最初的CGameEngineBase 類
/// <summary>
/// Return our game form object
/// </summary>
public Form GameForm
{
get
{
// Return our game form instance
return _gameForm;
}
}
現(xiàn)在我們已經(jīng)解決了“如何創(chuàng)建引擎”的問題,接下來看看需要為該類提供的功能。首先,要為該類添加兩部分主要功能:對象管理及游戲功能。我們先來看對象管理部分。
1. 管理游戲?qū)ο?/strong>
游戲中的每個對象都代表了屏幕上一個單獨的圖形實體。每個對象在屏幕上有一個位置,并且知道如何對自己進行繪制,也知道如何進行移動。
我們將在游戲引擎中保存一個集合,將任意時刻游戲中所有活動的對象包含到該集合中。這樣當需要某個對象做一些事情時,引擎就能夠與它進行交互。
在游戲中可以向游戲環(huán)境中添加新的對象,只需要創(chuàng)建這一個對象,并且把它添加到對象集合中。這種方式可以簡單靈活地處理潛在的大量的對象:每次想在游戲中添加點東西時,我們只要將它添加到對象集合中,然后就可以不用管它了,在游戲引擎之外不需要任何額外的代碼來管理這些對象。
所有游戲?qū)ο笫窃贑GameObjectBase的繼承類中實現(xiàn)的,我們馬上就會對該類進行詳細介紹。為了保存這些對象的集合,需要在CGameEngineBase類中添加一個類變量及其相應(yīng)的訪問屬性。如程序清單4-3所示。
程序清單4-3 游戲引擎中的對象集合及其訪問屬性
/// <summary>
/// Store a collection of game objects that are currently active
/// </summary>
private System.Collections.Generic.List<CGameObjectBase> _gameObjects;
/// <summary>
/// Retrieves the list of active game objects
/// </summary>
public System.Collections.Generic.List<CGameObjectBase> GameObjects
{
get
{
return _gameObjects;
}
}
然后要對類的構(gòu)造函數(shù)進行修改,當類進行實例化時要創(chuàng)建一個_gameObjects集合的實例。
要管理該對象列表中的對象,需要添加一些額外的代碼,在下一節(jié)的Advance函數(shù)中將對其進行介紹。
2. 游戲中的方法
為了使游戲能夠運行,需要讓它做下列事情:
● 執(zhí)行啟動初始化。
● 為開始一個新游戲進行重置。
● 玩游戲時對游戲的狀態(tài)進行更新。
● 在屏幕上進行繪制。
接下來看看每個工作是如何實現(xiàn)和使用的。