初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

Processing 入門

17.ブロック崩し4 ブロックとの当たり判定

 

今回は「ブロック崩し3 自機との当たり判定」の続きです。

プログラミングでよく使う計算式は、ほとんどが中学レベルのものです。
ゲームによっては三角関数など高校レベルのときもあります。
今回は中学レベルです。しかし、演算の優先は知っている必要がありますね。
ただ、これもカッコ( )を使えば簡単になります。
カッコの中を優先的に計算する決まりがあるからです。

 

 

ブロックを並べて表示しよう

それでは、ブロックを並べて表示してみましょう。
前回の「みどりを救えゲーム」でも使った %(割った余りを算出)を活用します。

 

ブロックを並べて表示する

 

実行すると次のように表示されます。
見た目はもうブロック崩しです。

ブロックを並べて表示

 

並べるときによく使う計算式を使っています。(89、90行目)
このような式を初めて見たとき、理解できないときがありますよね。
そんなときは for 文の回数を減らして実行してみましょう。
次の例では4回だけにしました。
これで変数 i の値がどのように影響するか、イメージし易くなったと思います。

回数を減らして試してみる

なお、ブロックの高さ( blh )と幅( blw )に+2しているのは、
ブロックの間にすき間を作るためです。

 

 

玉とブロックの当たり判定をしよう

ここでビックリマークのキーを覚えましょう。
エクスクラメーションマークとも言います。
次のところにあります。シフトキーを押しながら入力します。

ビックリマークのキー

 

 

これから当たり判定をして、ブロックを消すところまで行います。
配列変数 blf をブロックと同じ数だけ用意します。
この変数が 0 のときは表示させず、1 のときは表示するように使います。

 

玉とブロックの当たり判定をする

ブロックの表示で、表示と非表示を切り替えるようにします。
ついでに当たり判定も組み込みます。(96行目)

 

当たり判定の中で 105行目は注意です。
否定を使っています。
つまり、当たり判定の式が成立していれば 109行目に行きます。

否定を使った当たり判定

 

実行してみましょう。
玉と当たったブロックが次々と消えていきます。

ブロックが消えるのを確認する

 

 

玉を跳ね返らせよう

玉がブロックと当たったとき、跳ね返るようにします。
跳ね返りの処理と言えば、自機のときにも作りました。
しかし自機の場合は、玉が画面の上から移動してくるだけです。
それに対し、ブロックの場合は上下左右のどの方向にも対応しなければなりません。

 

ブロックの時の跳ね返りは四方ある

 

どの方向から玉が飛んできたのかチェックするため
移動前の位置を覚えておく変数を作ります。
変数 lastxlasty を使い、移動する前の座標を退避します。(73、74行目)

前の座標を使って跳ね返す方向を決める

 

跳ね返りの処理をシンプルにするため、3つのパターンのみで対応します。
移動前の玉がどの位置にいたかで分けてます。

・ブロックの幅の中にいた場合
・ブロックの高さの中にいた場合
・それ以外の場合

前座標がブロックの幅の中にあるとき

前座標がブロックの高さの中にあるとき

それ以外のとき

 

これは本当にシンプルさを優先させたプログラムです。
じっくり見ると違和感があるかもしれません。
いつか余裕がでたら、もっと複雑な当たり判定にチャレンジしてみてください。