C言語 入門 ブロック崩しの作り方

最終日 全ブロックの当たり判定

入門プログラムの定番のブロック崩しになります!

HOME/ブロック崩しの作り方 目次/最終日 全ブロックの当たり判定/

広告

↓2016年02月29日発売↓

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

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

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

目次へ戻る

全ブロックの当たり判定

今回は全ブロックの当たり判定ですね!

ボールが移動するたびに残っているブロック全ての当たり判定を一周させるようなイメージの当たり判定になります。

for (count = 0; count < 36; count++){
 if (blocks[count].flag == 1){
  if (ball_x >= blocks[count].x &&
	 ball_x <= blocks[count].x + BLOCK_WIDTH){

   if (ball_y == blocks[count].y){
    y_direction = 1;
    blocks[count].flag = 0;
   }
   else if (ball_y == blocks[count].y + BLOCK_HEIGHT){
    y_direction = 0;
    blocks[count].flag = 0;					
   }

  }
 }
}

ひとまず上面と下面の当たり判定だけを抜き出してみました。

一つ一つ見ていきたいと思います。

for (count = 0; count < 36; count++){
	if (blocks[count].flag == 1){
	}
}

全てのブロックを調べるので前回に設定したブロックの総数36個分を「for」ループで回します。

そして残っているブロックの当たり判定なので「if (blocks[count].flag == 1)」のブロックになりますね!

次は当たり判定です。

if (ball_x >= blocks[count].x &&
	ball_x <= blocks[count].x + BLOCK_WIDTH){
	}
}

前回にやった当たり判定を「for」ループで回してるだけなのでそこまで変わりはないですね。

ボールのx座標「ball_x」がブロックの左端「blocks[count].x」からブロックの右端「blocks[count].x + BLOCK_WIDTH」に入っている時に

if (ball_y == blocks[count].y){
	y_direction = 1;
	blocks[count].flag = 0;
}
else if (ball_y == blocks[count].y + BLOCK_HEIGHT){
	y_direction = 0;
	blocks[count].flag = 0;					
}

それぞれのy座標の高さを比べてあげるだけです。

同じように左面、右面の当たり判定をつければ当たり判定は完成です!

画像(b-7-1)

当たり・・・。

画像(b-7-2)

判定されます!

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

中間ソース5

中間ソースでは

#define MAX_BLOCKS 36
#define BLOCK_MAP_INDEX_X 6
#define BLOCK_MAP_INDEX_Y 6

ブロックの最大数と2次元配列のそれぞれの要素数を定数設定しております。

お疲れ様でした!

最後までお付き合いしていただいた方は感謝です!

完成ソースに簡単なスコアなどを加えてあります。

こちらのサイトを通して少しでもプログラミングの魅力を感じていただければ幸いです!

□ページの先頭へ□

□目次へ戻る□

広告

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