広告
↓発売日:2018年09月22日↓
新品価格 |
今回はバリアーとボムを作っていきたいと思います。
まずはバリアーから見てみましょう。
先にどのようなバリアーかと言いますと自機の周りを高速で防護壁がぐるぐると回転するようなバリアです。
それではいつも通り構造体から見てみましょう。
struct BARRIER{ double x, y; double draw_x, draw_y; int init_flag; int move_flag; double angle; int power; double range; }; struct BARRIER barrier1;
座標やフラグ類の他に今回は「sin,cos」を使って自機の周りを回転させるのでその為の角度「angle」があります。
初期化などはいつも通りなので起動部分、動作部分を見てみます。
起動部分になります。
void my_set_barrier(){ barrier1.move_flag = 1; barrier1.power = 30; }
バリアを起動する「my_set_barrier()」です。
バリアの強度にあたる「power」を設定して「move_flag」をセットしているだけです。
この「power」が「0」になればバリアは外れます。
続いて動作部分になります。
void my_move_barrier(){ if(barrier1.move_flag == 1){ if (barrier1.init_flag == 0){ barrier1.x = p1.x + cos(((DX_PI * 2) / 10) * gamecount) * 20; barrier1.y = p1.y + sin(((DX_PI * 2) / 10) * gamecount) * 20; barrier1.init_flag = 1; } else{ barrier1.x = p1.x + cos(((DX_PI * 2) / 10) * gamecount) * 20; barrier1.y = p1.y + sin(((DX_PI * 2) / 10) * gamecount) * 20; } } }
こちらも非常にシンプルですね。
まず回転の中心はプレイヤーの座標になるのでそこから「sin,cos」式で任意の場所にバリアを設置します。
今回はプレイヤーから半径「20」ピクセル離れた座標にバリアが設置されております。
あとは「sin,cos」式の角度をひたすらあげるだけです。
円1周が2πになるのでそれを今回は「10」で割ったものに「gamecount」をかけているので「gamecount」が「10」カウントで自機の周りを一周する事になるという事ですね。
あとは当たり判定部分にバリア起動と消滅を加えれば完了です。
今回は「item」を3つ以上取得でバリアが起動するようにしてみました。
バリア起動!
続きましてボムを見てみます。
どのようなボムかと言いますと画面全体が点滅、その場にいた敵と敵の弾を消滅させるというボムになります。
事前にプレイヤーの構造体にボムの残数として「bomb」という変数を加えてボム起動のキー設定をしておきます。
if (key[KEY_INPUT_X] == 1 && p1.bomb > 0){ my_set_bomb(); }
「x」キーでボム起動です。
構造体になります。
struct BOMB{ int init_flag; int move_flag; int count; int flag; }; struct BOMB bomb1;
画面全体を点滅させるので座標はありません。
「count」をカウンター用の変数として使用して、そのカウンターに合わせて「flag」の切り替えを行いこの「flag」に合わせて画面の描画、当たり判定をつけていきます。
それでは起動部分、動作部分を見てみます。
起動部分になります。
void my_set_bomb(){ if(bomb1.move_flag == 0){ bomb1.move_flag = 1; p1.bomb--; } }
「move_flag」をオンにしてボムの残数を減らします。
続いて動作部分です。
void my_move_bomb(){ if(bomb1.move_flag == 1){ if(bomb1.init_flag == 0){ bomb1.count = 0; bomb1.flag = 0; bomb1.init_flag = 1; } else{ if(bomb1.count < 10){ bomb1.count++; if(bomb1.count % 2 == 0){ bomb1.flag = 1; } else{ bomb1.flag = 0; } } else{ bomb1.move_flag = 0; bomb1.init_flag = 0; } } } }
初期化後、さきほどの説明通りに「count」の増加に合わせて定期的に「bo1.flag」を切り替えております。
描画部分も見てみます。
void my_draw_bomb(){ if(bomb1.move_flag == 1 && bomb1.init_flag == 1){ if(bomb1.flag == 1){ DrawBox(0,0,440,480,Color_White,true); } } }
さきほどの「bo1.flag」がオンの時だけ画面いっぱい白で描画しております。
これでフラッシュのような効果が得られます。
当たり判定もこのフラグに合わせて敵の体力を減らすようにすれば点滅の回数だけ体力を減らす事ができます。
ボム!
ここまでの中間ソースになります。
次回は簡単なボスの弾幕を作りたいと思います。
広告
↓発売日: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日↓
新品価格 |