C言語 入門 STGの作り方

十九日目 バリアーとボム

初心者向けSTG作成入門

HOME/STGの作り方 目次/十九日目 バリアーとボム/

広告

↓2016年02月29日発売↓

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

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

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

目次へ戻る

バリアー

今回はバリアーとボムを作っていきたいと思います。

まずはバリアーから見てみましょう。

先にどのようなバリアーかと言いますと自機の周りを高速で防護壁がぐるぐると回転するようなバリアです。

それではいつも通り構造体から見てみましょう。

struct BARRIER{
	double x, y;
	double draw_x, draw_y;
	int init_flag;
	int move_flag;
	double angle;
	int power;
	double range;
};

struct BARRIER b1;

座標やフラグ類の他に今回は「sin,cos」を使って自機の周りを回転させるのでその為の角度「angle」があります。

初期化などはいつも通りなので起動部分、動作部分を見てみます。

起動部分になります。

void my_set_barrier(){
	b1.move_flag = 1;
	b1.power = 30;
}

バリアを起動する「my_set_barrier()」です。

バリアの強度にあたる「power」を設定して「move_flag」をセットしているだけです。

この「power」が「0」になればバリアは外れます。

続いて動作部分になります。

void my_move_barrier(){
 if(b1.move_flag == 1){
  if (b1.init_flag == 0){
   b1.x = p1.x + cos(((DX_PI * 2) / 10) * gamecount) * 20;
   b1.y = p1.y + sin(((DX_PI * 2) / 10) * gamecount) * 20;
   b1.init_flag = 1;
  }
  else{
   b1.x = p1.x + cos(((DX_PI * 2) / 10) * gamecount) * 20;
   b1.y = p1.y + sin(((DX_PI * 2) / 10) * gamecount) * 20;
  }		
 }
}

こちらも非常にシンプルですね。

まず回転の中心はプレイヤーの座標になるのでそこから「sin,cos」式で任意の場所にバリアを設置します。

今回はプレイヤーから半径「20」ピクセル離れた座標にバリアが設置されております。

あとは「sin,cos」式の角度をひたすらあげるだけです。

円1周が2πになるのでそれを今回は「10」で割ったものに「gamecount」をかけているので「gamecount」が「10」カウントで自機の周りを一周する事になるという事ですね。

あとは当たり判定部分にバリア起動と消滅を加えれば完了です。

今回は「item」を3つ以上取得でバリアが起動するようにしてみました。

画像(s-19-1)

バリア起動!

ボム

続きましてボムを見てみます。

どのようなボムかと言いますと画面全体が点滅、その場にいた敵と敵の弾を消滅させるというボムになります。

事前にプレイヤーの構造体にボムの残数として「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 bo1;

画面全体を点滅させるので座標はありません。

「count」をカウンター用の変数として使用して、そのカウンターに合わせて「flag」の切り替えを行いこの「flag」に合わせて画面の描画、当たり判定をつけていきます。

それでは起動部分、動作部分を見てみます。

起動部分になります。

void my_set_bomb(){
	if(bo1.move_flag == 0){
		bo1.move_flag = 1;
		p1.bomb--;
	}
}

「move_flag」をオンにしてボムの残数を減らします。

続いて動作部分です。

if(bo1.init_flag == 0){
	bo1.count = 0;
	bo1.flag = 0;
	bo1.init_flag = 1;
}
else{
	if(bo1.count < 10){
		bo1.count++;
		if(bo1.count % 2 == 0){
			bo1.flag = 1;
		}
		else{
			bo1.flag = 0;
		}
	}
	else{
		bo1.move_flag = 0;
		bo1.init_flag = 0;
	}
}

初期化後、さきほども説明通りに「count」の増加に合わせて定期的に「bo1.flag」を切り替えております。

描画部分も見てみます。

void my_draw_bomb(){
	if(bo1.move_flag == 1 && bo1.init_flag == 1){
		if(bo1.flag == 1){
			DrawBox(0,0,640,480,Color_White,true);
		}
	}
}

さきほどの「bo1.flag」がオンの時だけ画面いっぱい白で描画しております。

これでフラッシュのような効果が得られます。

当たり判定もこのフラグに合わせて敵の体力を減らすようにすれば点滅の回数だけ体力を減らす事ができます。

画像(s-19-2)

ボム!

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

中間ソース18

次回は簡単なボスの弾幕を作りたいと思います。

次回

二十日目 簡単な弾幕(準備中)

□ページの先頭へ□

□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□