C言語 入門 STGの作り方

十日目 アイテム

初心者向けSTG作成入門

HOME/STGの作り方 目次/十日目 アイテム/

広告

↓2016年02月29日発売↓

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

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

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

目次へ戻る

アイテム

今回はアイテムを作ります。

前回までとかわらずほとんど同じような処理なので軽く説明したいと思います。

構造体になります。

struct ITEM{
	double first_x;
	double first_y;
	double x;
	double y;
	double draw_x;
	double draw_y;
	int init_flag;
	int move_flag;
	int move_type;
	int gamecount_point;
	double range;
};

struct ITEM item[DISP_ENEMY_MAX];

いつも通りの座標やフラグですね。

アイテムはプレイヤーと接触するので当たり判定範囲の「range」があります。

とりあえず敵と同じ数用意しております。

初期化

初期化します。

void my_init_item(){
	for (int i = 0; i < DISP_ENEMY_MAX; i++){
		item[i].first_x = 0;
		item[i].first_y = 0;
		item[i].x = 0;
		item[i].y = 0;
		item[i].draw_x = 0;
		item[i].draw_y = 0;
		item[i].init_flag = 0;
		item[i].move_flag = 0;
		item[i].move_type = 0;
		item[i].range = 10;
		item[i].gamecount_point = 0;
	}
}

当たり判定範囲「range」は「10」それ以外は全て「0」で初期化しているだけです。

アイテムの流れ

アイテムの流れを見てみましょう。

1・アイテムを持っている敵が消滅する時にアイテム発生!!

2・アイテムが発生したら現在未使用の「アイテムの入れ物」を調べて使用中に

3・その時の初期座標などを「アイテムの入れ物」に登録

4・その「アイテムの動き方」に応じて出現・計算・表示

5・終わったら再び「アイテムの入れ物」を未使用に

ではアイテムが発生するトコロから見ていきましょう。

アイテム発生

「my_collision_detection()」の中ほど敵の体力が「0」以下だった時にフラグを落として消滅させている部分です。

if(enemy[i].power <= 0){
 my_set_exp_effect(enemy[i].x,enemy[i].y);
 if(enemy[i].item_flag == 1){
  my_set_item(enemy[i].x,enemy[i].y);
 }
 enemy[i].move_flag = 0;
 enemy[i].init_flag = 0;
}

中ほどの

if(enemy[i].item_flag == 1){
	my_set_item(enemy[i].x,enemy[i].y);
}

という部分ですね。

敵の体力が「0」以下で、その敵がアイテムを持っている敵なら、その時の敵の座標を渡してアイテムを発生させます。

では「my_set_item()」の中身を見てみましょう。

void my_set_item(double x,double y){
	for(int i = 0;i < DISP_ENEMY_MAX;i++){
		if(item[i].move_flag == 0){
			item[i].move_flag = 1;
			item[i].first_x = x;
			item[i].first_y = y;
			break;
		}
	}
}

同じように「item[i].move_flag == 0」の敵を探して座標と動き方を登録しているだけですね!

アイテムの動き方は1種類のみにしておりますのでここでは初期座標のみを登録しております。

続いて実際の動きに入っていきます。

「アイテムの動き方」に応じて出現・計算

アイテムの動き方を計算する「my_move_item()」です。

少し長いので分けて説明します。

まずは全ての「アイテムの入れ物」を調べてそれが使用中かどうか調べます。

for(int i = 0;i < DISP_ENEMY_MAX;i++){
	if(item[i].move_flag == 1){
	}
}

ここで使用中「item[i].move_flag == 1」の状態のものがあった場合、そのアイテムは動いていなきゃいけないので動かします。

「switch」文で動き方を振り分けます。

switch (item[i].move_type){
case 0:
	break;
default:
	break;
}

今回は「case 0」普通のアイテムの動き方を作ります。

「switch」文で振り分けをしておりますが先ほども言いましたとおりアイテムの動き方は1種類のみにしておりますのでこれ以外の動き方は作りません。

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

初期化部分を見てみます。

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

初期化用のフラグ「item[i].init_flag == 0」の時は初期化されていないので初期化をします。

初期座標はその時消滅した敵の座標を移した「item[i].first_x,item[i].first_y」ですね。

あとは基準となる「gamecount」を記録して初期化完了です。

では移動部分を見てみましょう。

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

if (gamecount < item[i].gamecount_point + 240){
	item[i].y -= 2;
}
else{
	item[i].move_flag = 0;
	item[i].init_flag = 0;
}

「gamecount_point」を基準に下方に「2」ピクセルずつ移動、「240」カウント経過した時点で消滅します。

座標を中央に・表示

こちらは前回までと同じような処理なので省略させて頂きます。

画像(s-10-1)

アイテム発生!!!

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

中間ソース9

次回はボスを作ります。

次回

十一日目 ボスを表示

□ページの先頭へ□

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