第二章「実戦!SDLでゲーム作り@〜某宇宙人〜」第六話


プログラムも基盤ができれば、あとはオプションをどんどんつけていくだけです。

今回は自機の出すミサイルの処理を作ってみましょう。

ここでのポイントは、ミサイルのデータを構造体にして、ミサイルの数分、その構造体に配列を持たせます。

また、自機のほうに、ミサイル発射処理の呼び出しを作り、そこに、自機のx,y座標を引数に使います。
そうすれば、Misslileでは外部変数なしに、ミサイル発射の処理を行うことができます。





サンプルソース

GameMain.cppにMoveMissile();を追加
GameInitOver.cppにInitMissile();を追加
Game.hの追加ソース

void InitMissile(void); void MoveMissile(void); //ミサイルの移動処理 void GoMissile(int x,int y); //ミサイルの発射処理 #define MISSILE_MAX 3 //一度に出せるミサイルの数 #define MISSILE_LIMIT 20 //ミサイルの消えるy座標 #define MCOUNT 5 //一発打つ毎の待ち時間。

Chara.cppの追加ソース

MoveChara()の最後に if((key % 8) >=4) GoMissile(CharaX,CharaY); //スペースキーが押されていれば、ミサイル発射処理へ。

Missile.cppのソース

#include "Def.h" struct MISSILE //ミサイルの情報を構造化する { int mx; //x座標 int my; //y座標 int mGo; //発射中かどうか }; static MISSILE Missile[MISSILE_MAX]; static mCount = MCOUNT; //一発打つ毎の待ち時間 void InitMissile() //ミサイルの初期化 { for(int i=0;i < MISSILE_MAX;i++) { Missile[i].mx=0; Missile[i].my=0; Missile[i].mGo=0; } } void MoveMissile() //ミサイルの移動 { for(int i=0;i < MISSILE_MAX;i++) { if(Missile[i].mGo == 1) //発射されていれば移動する。 { Missile[i].my -= 10; DrawImg(64,0,32,32,Missile[i].mx,Missile[i].my); if(Missile[i].my < MISSILE_LIMIT){ Missile[i].mGo = 0;} } } if(mCount < MCOUNT)mCount++; //前の発射からのカウントをここで進めておく。 } void GoMissile(int x,int y) //発射処理 { for(int i=0;i < MISSILE_MAX;i++) //空いているミサイルを探す。 { if(Missile[i].mGo == 0) { if(mCount == MCOUNT) { Missile[i].mGo = 1; Missile[i].mx = x; Missile[i].my = y; mCount = 1; break; } } } }



〜〜第七話へ〜〜