画像(logo)

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

[JAVA言語 ブロック崩しの作り方]
最終日 全ブロックの当たり判定

広告

↓2017年04月19日発売↓

カラー図解 Javaで始めるプログラミング 知識ゼロからの定番言語「超」入門 (ブルーバックス)

新品価格
¥1,080から
(2017/5/1 13:45時点)

目次へ戻る

全ブロックの当たり判定

いよいよ最終日です。

全ブロックの当たり判定をやっていきたいと思います。

「for」で当たり判定を一周

全ブロックの当たり判定と言われると何やら難しそうな事をしそうですが、冒頭でもお話した通りブロック一つ分の当たり判定を全てのブロックに対して「for」ループなどで回すだけで大丈夫です。

if(block.get_flag()){
	if(ball.get_x() >= block.get_x() && ball.get_x() <= block.get_x() + block.get_width()){
		if(ball.get_y() >= block.get_y() && ball.get_y() <= block.get_y() + 3){
			ball.set_y(block.get_y());
			ball.ch_y_speed();
			block.set_flag(false);
		}
		else if(ball.get_y() <= block.get_y() + block.get_height() && ball.get_y() >= block.get_y() + block.get_height() - 3){
			ball.set_y(block.get_y() + block.get_height());
			ball.ch_y_speed();
			block.set_flag(false);
		}
	}
}

前回やったブロック一つ分だけの当たり判定になります。

わかりやすいように上面、下面の判定部分だけ抜き出してみました。

この判定を「for」ループで全てのブロックに対して行っていきます。

for(int count = 0;count < Define.MAX_BLOCK;count++){
	if(blocks[count].get_flag()){
		if(ball.get_x() >= blocks[count].get_x() && ball.get_x() <= blocks[count].get_x() + blocks[count].get_width()){
			if(ball.get_y() >= blocks[count].get_y() && ball.get_y() <= blocks[count].get_y() + 3){
				ball.set_y(blocks[count].get_y());
				ball.ch_y_speed();
				blocks[count].set_flag(false);
				break;
			}
			else if(ball.get_y() <= blocks[count].get_y() + blocks[count].get_height() && ball.get_y() >= blocks[count].get_y() + blocks[count].get_height() - 3){
				ball.set_y(blocks[count].get_y() + blocks[count].get_height());
				ball.ch_y_speed();
				blocks[count].set_flag(false);
				break;
			}
		}			
	}
}

こちらが「for」ループで全ブロックに当たり判定を適用したものになります。

さきほどのブロック一つ分のものと比べてみるとわかると思いますが、

「block.get_x()」

こちらが

「blocks[count].get_x()」

こうなっているだけであとはほぼ一緒ですね!

難しく考えず「for」で回すだけで全ての判定は大丈夫です。

広告

角の判定

今回の作り方ですと一度判定があった場合、それ以上の判定はありえない上にその後がムダになるので当たり判定のループから「break」文で脱出しておりますが、この「break」文を削除してなおかつその後の「左面・右面」の判定部分を「else」で結ばなければ角に当たった時の判定もいちようしてくれます。

その場合どうなるかと言いますと単純に両方ともプラスマイナスが入れ替わるのでまっすぐ逆方向に反射するのですが、これを利用して角に当たった場合はランダムで

1・x方向のみプラスマイナスを反転

2・x,y方向両方のプラスマイナスを反転

3・y方向のみプラスマイナスを反転

などのようにすれば少しゲームに幅がでてくるかもしれません。

画像(jb_7_1)

当たり

画像(jb_7_2)

判定されます!

最終ソースになります。

最終ソース

お疲れ様でした!

大変長らくお疲れ様でした!

これで「ブロック崩しの作り方」を終わりにしたいと思います。

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

完成ソースの方にささやかなスコアボックス・背景なども加えてみたのでもし興味ありましたらのぞいてみてください。

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

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓2016年06月25日発売↓

新・明解Java入門 (明解シリーズ)

新品価格
¥2,916から
(2017/5/1 13:47時点)

↓2017年04月18日発売↓

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

新品価格
¥3,218から
(2017/5/1 13:50時点)

↓2017年05月17日発売↓

新・明解 Javaで学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,592から
(2017/5/1 13:54時点)

↓2017年04月04日発売↓

Java 第2版 入門編 ゼロからはじめるプログラミング (プログラミング学習シリーズ)

新品価格
¥2,030から
(2017/5/1 13:55時点)