0からのゲームプログラミング > 誘導弾 4

Back Next
更新日 2004.03.26
誘導弾 4

 続きです。以下では、

m_JikiShot.SetEnemy(&m_Enemy);

を追加しています。

ScreenStage.cpp

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

	m_Jiki.Init();		// 自機の初期化

	m_JikiShot.SetJikiPos(m_Jiki.GetPos());
	m_JikiShot.SetEnemy(&m_Enemy);
	m_JikiShot.Init();	// 自機の弾の初期化

	m_Enemy.Init();		// 敵機の初期化

	・
	・
	・
}


 ノーマル弾と誘導弾では当たり範囲の大きさが違いますので、当たり判定のコードも修正しておきます。

Touch.cpp

//====================================================================
//			CTouch クラス
//--------------------------------------------------------------------
//	処理内容 : 当たり判定
//	ファイル名	 : Touch.cpp
//	作成者	 : Copyright(C) 2004 ※※ ※※
//====================================================================


//====================================================================
//			プリコンパイル済みヘッダの使用
//====================================================================
#include	"..\Header\StdAfx.h"


//====================================================================
//			ヘッダファイルのインクルード
//====================================================================
#include	"..\Header\Touch.h"
#include	"..\Header\InitialSetting.h"


// 自機の弾の当たりの範囲(左上x座標, 左上y座標, 右下x座標, 右下y座標)
const float	gc_fJikiShotTouch[2][4] = {
	2, 2, 5, 5,	// ノーマル弾
	2, 14, 5, 17,	// 誘導弾
};


//====================================================================
//			CTouch クラスの実装
//====================================================================

// 自機の弾と敵機との当たり判定
// 引数、戻値なし。
void CTouch::JikiShotAndEnemy(void)
{
	CJikiShot::tagData	*pJikiShotData = m_pJikiShot->m_pHead;
	CEnemy::tagData		*pEnemyData;


	while(pJikiShotData)
	{
		pEnemyData = m_pEnemy->m_pHead;

		while(1)
		{
			if(!pEnemyData)
			{
				pJikiShotData = pJikiShotData->pNext;
				break;
			}

			// 自機の弾と敵機が当たったかどうか
			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);
				break;
			}

			pEnemyData = pEnemyData->pNext;
		}
	}
}


//====================================================================


 以上でビルド[メイク]を通すと、Xキーで誘導弾[ミサイル]が発射されます。


スクリーンショット

【スポンサード リンク】


Back Next

0からのゲームプログラミング > 誘導弾 4