第18回:ステージ構成をプログラムする
敵の出現パターンを定義するクラスを作成します。今回はプログラムレベルで定義していますが、マップチップデータに敵出現データを埋め込んだり、スクリプトファイルを別途用意したりするなど、いろいろ工夫するのもよいでしょう。class CEnemyPattern : public CGameObject
{
public:
CEnemyPattern();
private:
int frame;
protected:
virtual void Exec();
};
CEnemyPattern::CEnemyPattern()
{
frame = 0;
}
void CEnemyPattern::Exec()
{
// フレーム数に応じて敵の出現方法を変える
if(frame == 0){
// メインBGMの再生
CBGMusic *bgm = (CBGMusic*)FindObject("bgm1");
bgm->Play(true);
}else if(frame > 150 && frame < 400){
// 雑魚1の編隊を左側から突入させる
if(frame % 20 == 0){
AppendObject(new CEnemy1(40.0f), ENEMY_PRIORITY, true);
}
}else if(frame >= 600 && frame < 850){
// 雑魚2の編隊を右側から突入させる
if(frame % 20 == 0){
AppendObject(new CEnemy1(600.0f), ENEMY_PRIORITY, true);
}
}else if(frame >= 1050 && frame < 1300){
// 雑魚1の編隊を左右から交互に突入させる
if(frame % 40 == 0){
AppendObject(new CEnemy1(40.0f), ENEMY_PRIORITY, true);
}else if(frame % 40 == 20){
AppendObject(new CEnemy1(600.0f), ENEMY_PRIORITY, true);
}
}else if(frame == 1500){
// 中ボスの出現
AppendObject(new CEnemy3(100.0f), ENEMY_PRIORITY, true);
}else if(frame > 2000 && frame <= 2400){
// 雑魚2をランダムの位置に発生
if(frame % 30 == 0){
AppendObject(new CEnemy2
((float)(50 + (rand() % 540))), ENEMY_PRIORITY, true);
}
// ボス戦に入る前にメインBGMをフェードアウトさせる
if(frame == 2400){
CBGMusic *bgm = (CBGMusic*)FindObject("bgm1");
bgm->Fade(5000, -5000);
}
}else if(frame == 2600){
// ボスの出現
CBGMusic *bgm = (CBGMusic*)FindObject("bgm2");
bgm->Play(true);
AppendObject(new CBoss(), ENEMY_PRIORITY, true);
}
frame++;
}
MP3といえども、そのファイルサイズは結構な量になるため、サイトからの配布は行っておりませんので、お好みのMP3ファイルを各自ご用意ください。ちなみに、「TiMidity++」というオンラインソフトを使うと、midiファイルをMIDI機材を使うことなく高音質なMP3ファイルに変換することができます。