広告
↓発売日:2018年09月22日↓
新品価格 |
ようやくボスも登場したのでステージ遷移などの処理に移りたいトコロですが、ステージボス撃破の時に通常の敵と同じ爆発エフェクトだとちょっとさみしいのでほんのちょっとグレードアップした爆発エフェクトを作りたいと思います。
「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()」などを使って無理やり停止するなりなんなりして確かめてみてください。
ボス撃破!!!
ボスが爆発している最中にも動いてしまわないようにボスの動きのトコロに「boss[i].power > 0」という条件を加えております。
ここまでの中間ソースになります。
次回はここにステージ遷移やゲームオーバーなどの処理を加えていきます。
広告
↓発売日:2016年02月29日↓
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
新品価格 |
↓発売日:2018年03月09日↓
新品価格 |
↓発売日:2017年06月14日↓
新品価格 |
↓発売日:2018年05月21日↓
新品価格 |
↓発売日:2017年12月07日↓
新品価格 |
↓発売日:2017年02月08日↓
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
新品価格 |