画像(logo)

HOME/[C言語DXライブラリ]STGの作り方 目次/十二日目 ボスの爆発エフェクト

広告

[C言語 DXライブラリ STGの作り方]
十二日目 ボスの爆発エフェクト

広告

↓2016年02月29日発売↓

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

目次へ戻る

ボスの爆発エフェクト

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

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

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

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

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_check_boss_power()」を少し変更します。

void my_check_boss_power(){
	for(int i = 0;i < DISP_BOSS_MAX;i++){
		if(boss[i].move_flag == 1 && boss[i].init_flag == 1){
			if(boss[i].power <= 0){
				gamecount2++;
				if(gamecount2 == 1){
					my_set_exp_effect(boss[i].x,boss[i].y,2);
				}
				else if(gamecount2 == 200){
					boss[i].move_flag = 0;
					boss[i].init_flag = 0;
					if(boss[i].end_flag == 1){
						/*to next stage*/
					}
					gamecount2 = 0;
				}
			}
		}
	}
}

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

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

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

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

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

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

else if(gamecount2 == 200){
	boss[i].move_flag = 0;
	boss[i].init_flag = 0;
	if(boss[i].end_flag == 1){
		/*to next stage*/
	}
	gamecount2 = 0;
}

もし「if(boss[i].end_flag == 1)」が機能しているかどうか心配でしたら「WaitKey()」などを使って無理やり停止するなりなんなりして確かめてみてください。

画像(cdxs_12_1)

ボス撃破!!!

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

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

中間ソース11

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

次回

十三日目 ステージ遷移

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓2017年06月16日発売↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2017/5/1 13:05時点)

↓2014年08月09日発売↓

新・明解C言語 入門編 (明解シリーズ)

新品価格
¥2,484から
(2017/5/1 13:08時点)

↓2016年02月20日発売↓

新・解きながら学ぶC言語

新品価格
¥2,160から
(2017/5/1 13:10時点)

↓2017年02月11日発売↓

C言語プログラミング基本例題88 88

新品価格
¥3,024から
(2017/5/1 13:12時点)

↓2016年12月15日発売↓

Cの絵本 第2版 C言語が好きになる新しい9つの扉

新品価格
¥1,490から
(2017/5/1 13:13時点)

↓2017年02月08日発売↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2017/5/1 13:15時点)