C言語 入門 STGの作り方

十二日目 ボスの爆発エフェクト

初心者向けSTG作成入門

HOME/STGの作り方 目次/十二日目 ボスの爆発エフェクト/

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2016/5/10 22:16時点)

もっと!C、C++言語本

目次へ戻る

ボスの爆発エフェクト

ようやくボスも登場したのでステージ遷移などの処理に移りたいトコロですが、ステージボス撃破の時に通常の敵と同じ爆発エフェクトだとちょっとさみしいのでほんのちょっとグレードアップした爆発エフェクトを作りたいと思います。

「my_move_exp_effect()」の「case 1」に当たる部分です。

初期化部分と移動部分に分かれます。

まずは初期化部分見てみましょう。

if (exp_effect[i].init_flag == 0){
	exp_effect[i].x = exp_effect[i].first_x;
	exp_effect[i].y = exp_effect[i].first_y;
	exp_effect[i].gamecount_point = gamecount;
	exp_effect[i].init_flag = 1;
}
else{
	/*移動部分*/
}

座標を移して「gamecount」を登録して、とここは通常の爆発エフェクトと変わりありません。

では移動部分を見てみたいと思います。

さきほどの「else」部分ですね。

if (gamecount < exp_effect[i].gamecount_point + 200){
 if(gamecount % 10 == 1){
  int ran = (rand() % 5);
  int ran2 = (rand() % 5);
  int ary[5] = {-20,-10,0,10,20};
  exp_effect[i].x = exp_effect[i].first_x + ary[ran];
  exp_effect[i].y = exp_effect[i].first_y + ary[ran2];
 }
}
else{
 exp_effect[i].move_flag = 0;
 exp_effect[i].init_flag = 0;
}

「gamecount_point」を基準「200」カウント分定期的に爆発エフェクトの座標をランダムに更新させているような処理になります。

ランダムに?乱数?という方はこちらの乱数の項目を参考にしてみてください。

「srand()」文は「my_init_variable()」に記述してあります。

ではあらためまして

if(gamecount % 10 == 1){
}

「10」カウント毎に

int ran = (rand() % 5);
int ran2 = (rand() % 5);

乱数を2つ作って

int ary[5] = {-20,-10,0,10,20};

座標をずらす為の値をあらかじめ用意

exp_effect[i].x = exp_effect[i].first_x + ary[ran];
exp_effect[i].y = exp_effect[i].first_y + ary[ran2];

その座標をランダムに元の座標に加えているだけですね!

これでとりあえずボスの爆発エフェクトは完成です。

ステージ遷移前準備

前準備ってほどでもないですが、さっそく今作った爆発エフェクトをボス用に変更して

1・ステージボス撃破

2・ボス用爆発エフェクト起動

3・ステージクリアフラグ確認

というトコロまでやってみたいと思います。

「my_collision_detection()」の後半部分ボスの当たり判定内、ボスの残り体力を調べているトコロですね。

if(boss[i].power <= 0){
 gamecount2++;
 if(gamecount2 == 1){
  my_set_exp_effect(boss[i].x,boss[i].y,1);
 }
 else if(gamecount2 == 200){
  if(boss[i].end_flag == 1){
   WaitKey();
  }
  gamecount2 = 0;
  boss[i].move_flag = 0;
  boss[i].init_flag = 0;
 }
}

ステージボスを撃破、すぐに次のステージという感じでは慌ただしいし、さっきの爆発エフェクトの意味がないので時間調整の為に「gamecount2」という変数を用意して「200」カウント分はかるようにしております。

この間に先ほどの爆発エフェクトを差し込みます。

このように無造作に変数を用意するのはあまりよくはありませんが、そのへんは入門用プログラムという事でご了承ください。

カウントがはじまってすぐにさきほどの爆発エフェクトを起動!

if(gamecount2 == 1){
	my_set_exp_effect(boss[i].x,boss[i].y,1);
}

そしてカウントが「200」になったらステージクリアフラグを確認してステージ遷移などの処理に入っていきます。

else if(gamecount2 == 200){
	if(boss[i].end_flag == 1){
		WaitKey();
	}
	gamecount2 = 0;
	boss[i].move_flag = 0;
	boss[i].init_flag = 0;
}

今回はきちんと「boss[i].end_flag == 1」が機能しているかどうかを「WaitKey()」で確認しております。

画像(s-12-1)

ボス撃破!!!

ボスが爆発している最中にも動いてしまわないようにボスのトコロに「boss[i].power > 0」という条件を加えております。

ここまでの中間ソースになります。

中間ソース11

次回はここにステージ遷移やゲームオーバーなどの処理を加えていきます。

次回

十三日目 ステージ遷移

□ページの先頭へ□

□HOME□

広告

↓2014年06月20日発売↓

14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編

新品価格
¥2,500から
(2016/5/10 22:17時点)

↓2014年10月25日発売↓

超本格! サンプルで覚えるC言語 3Dゲームプログラミング教室

新品価格
¥3,110から
(2016/5/10 22:18時点)

↓2013年07月25日発売↓

小学生からはじめるわくわくプログラミング

新品価格
¥2,052から
(2016/5/10 22:21時点)

↓2016年05月13日発売↓

小学生からはじめるわくわくプログラミング2

新品価格
¥2,052から
(2016/5/10 22:22時点)

もっと!C、C++言語本

□ページの先頭へ□

□HOME□