GPGAが考えてるゲームプログラム構築(5)

さて、次はタスクの部分に入ります。

タスクベースクラスのヘッダーです。


TaskBase.h
/*!
* @brief タスクベース
*/
class TaskBase
{
public :
/*!
* @brief コンストラク
*/
TaskBase(DWORD ulMode, DWORD ulMaxObject);
/*!
* @brief デストラク
*/
virtual ~TaskBase();
/*!
* @brief メイン処理
*/
virtual void Task() = 0;

protected :
/*!
* @brief オブジェクトの作成
*
* @param ulIndex オブジェクトのインデックス
* @param ulIdno オブジェクトのID
* @param ulMode オブジェクトの初期モード
* @param pSharing 共通領域のポインタ
*
* @retval 0 :正常終了
* @retval -1:異常終了
*/
virtual long _CreateObject(DWORD ulIndex, DWORD ulIdno, DWORD ulMode, void* pSharing) = 0;
/*!
* @brief オブジェクトの開放
*
* @param ulIndex オブジェクトのインデックス
*/
virtual void _ReleaseObject(DWORD ulIndex);
/*!
* @brief アクション
*/
virtual void _Action();
/*!
* @brief 描画
*/
virtual void _Draw();

protected :
SYSTEM_DATA* m_pSystem; //!< システムデータ
ObjectBase** m_ppObject; //!< オブジェクトのポインタ
DWORD m_ulMode; //!< モード
DWORD m_ulMaxObject; //!< 最大オブジェクト数
};

SYSTEM_DATAはグローバルとして使用する構造体です。


次に、タスクベースクラスのヘッダーです。

TaskBase.cpp
/*
* @brief コンストラク
*/
TaskBase::TaskBase(DWORD ulMode, DWORD ulMaxObject)
{
m_ulMode = ulMode;

// システムデータの取得
m_pSystem = MainSharing::GetSystemDat();

// オブジェクトのセット
m_ulMaxObject = ulMaxObject;
m_ppObject = new ObjectBase*[ulMaxObject];
for (DWORD i = 0 ; i < ulMaxObject ; i++) {
m_ppObject[i] = NULL;
}
}
/*
* @brief デストラク
*/
TaskBase::~TaskBase()
{
// オブジェクトの開放
if (m_ppObject != NULL) {
delete m_ppObject;
m_ppObject = NULL;
}
}
/*
* @brief オブジェクトの開放
*/
void TaskBase::_ReleaseObject(DWORD ulIndex)
{
if (m_ppObject[ulIndex] != NULL) {
delete m_ppObject[ulIndex];
m_ppObject[ulIndex] = NULL;
}
}
/*
* @brief アクション
*/
void TaskBase::_Action()
{
}
/*
* @brief 描画
*/
void TaskBase::_Draw()
{
}

これでタスクベースクラスは終了です。
コンストラクタで、そのタスクの最大オブジェクト数を受け取り、その分のオブジェクト配列を生成しています。
デストラクタでは、生成したオブジェクト配列を開放するだけです。
Action関数と_Draw関数ですが、ぶっちゃけますと、無くても良かったりしますが
あると便利なので、仮想関数にしています。