0からのゲームプログラミング > テキスト描画 3

Back Next
更新日 2004.03.27
テキスト描画 3

 今度は、敵機を倒したときに得点が加算されるようにしてみましょう。以下、サンプルコードです。


Score.h

//====================================================================
//			CScore クラスの定義
//====================================================================
class CScore{
	CText2D			*m_pText;		// テキスト
	int			m_nScore;		// 得点

public:
	・
	・
	・

	// 得点を加える
	void Plus(void){
		m_nScore++;
	}
};

 Screen.h では、得点を保持する変数 m_nScore を追加し、得点を加えるメンバ関数 Plus を追加しています。


Score.cpp

// コンストラクタ
CScore::CScore() : m_pText(NULL), m_nScore(0)
{
}


// 描画
// 引数、戻値なし。
void CScore::Draw(void)
{
	// テキストを描画する前に呼び出す。
	m_pText->Begin();

	// x座標, y座標, 色, 文字
	m_pText->Draw(0, 0, 0xffffffff, "得点:%03d", m_nScore);

	// テキストを描画した後に呼び出す。
	m_pText->End();
}

 Score.cpp では、コンストラクタで m_nScore を初期化し、m_pText->Draw() の引数を変更しています。これで、m_nScore の値が表示されますね。


Touch.h

//====================================================================
//			ヘッダファイルのインクルード
//====================================================================
#include	"JikiShot.h"
#include	"Enemy.h"
#include	"Explosion.h"
#include	"Score.h"


//====================================================================
//			CTouch クラスの定義
//====================================================================
class CTouch{
	CJikiShot	*m_pJikiShot;		// 自機の弾クラス
	CEnemy		*m_pEnemy;		// 敵機クラス
	CExplosion	*m_pExplosion;		// 爆発クラス
	CScore		*m_pScore;		// 得点クラス

public:
	・
	・
	・

	void SetScore(CScore * pScore){
		m_pScore = pScore;
	}
};

 Touch.h では、Score.h をインクルードし、CScore クラスへのポインタを追加し、メンバ関数 SetScore を追加しています。


Touch.cpp

// 自機の弾と敵機との当たり判定
// 引数、戻値なし。
void CTouch::JikiShotAndEnemy(void)
{
	・
	・
	・

		// 自機の弾と敵機が当たったかどうか
		if(pJikiShotData->vec2.x + gc_fJikiShotTouch[pJikiShotData->nKind][2] > pEnemyData->vec2.x + 13
			&& pJikiShotData->vec2.y + gc_fJikiShotTouch[pJikiShotData->nKind][3] > pEnemyData->vec2.y + 10
			&& pJikiShotData->vec2.x + gc_fJikiShotTouch[pJikiShotData->nKind][0] < pEnemyData->vec2.x + 35
			&& pJikiShotData->vec2.y + gc_fJikiShotTouch[pJikiShotData->nKind][1] < pEnemyData->vec2.y + 25)
		{
			// 爆発を発生させる
			m_pExplosion->Create(pEnemyData->vec2.x + 19, pEnemyData->vec2.y + 17.5f);

			// 自機の弾と敵機を削除
			pJikiShotData = m_pJikiShot->EraseNext(pJikiShotData);
			pEnemyData = m_pEnemy->EraseNext(pEnemyData);

			// 得点を加える
			m_pScore->Plus();

			break;
		}

	・
	・
	・
}

 Touch.cpp では、自機の弾と敵機が当たったとき、得点を加えるようにしています。( m_pScore->Plus を追加しています。)


ScreenStage.cpp

// コンストラクタ
CScreenStage::CScreenStage()
{
	・
	・
	・

	// 当たり判定の初期化
	m_Touch.SetJikiShot(&m_JikiShot);
	m_Touch.SetEnemy(&m_Enemy);
	m_Touch.SetExplosion(&m_Explosion);
	m_Touch.SetScore(&m_Score);

	・
	・
	・
}

 ScreenStage.cpp では、SetScore を呼び出すのを忘れずにしておきます。


 特に難しいところはなかったと思いますが、これで得点が表示されるようになりました。ちょっとはゲームらしくなってきましたね。(^^;....


スクリーンショット

【スポンサード リンク】


Back Next

0からのゲームプログラミング > テキスト描画 3