画像(logo)

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

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

広告

広告

↓発売日:2017年04月04日↓

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

新品価格
¥2,030から
(2018/10/8 23:34時点)

目次へ戻る

全ブロックの当たり判定

いよいよ最終日です。

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

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

広告

↓発売日:2017年04月18日↓

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

新品価格
¥2,990から
(2018/10/8 23:35時点)

↓発売日:2016年06月25日↓

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

新品価格
¥2,916から
(2018/10/8 23:36時点)

↓発売日:2016年08月31日↓

やさしいJava 第6版 (「やさしい」シリーズ)

新品価格
¥2,786から
(2018/10/8 23:37時点)

↓発売日:2018年11月21日↓

本格学習 Java入門 [改訂3版]

新品価格
¥2,462から
(2018/10/8 23:38時点)

↓発売日:2016年12月15日↓

Javaの絵本 第3版 Javaが好きになる新しい9つの扉

新品価格
¥1,706から
(2018/10/8 23:39時点)

↓発売日:2016年09月28日↓

やさしいJava 活用編 第5版 (「やさしい」シリーズ)

新品価格
¥2,786から
(2018/10/8 23:40時点)