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

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

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

Processing 入門

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

 

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

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

 

 

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

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

 

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

 

 

実行すると次のように表示されます。

 

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

 

 

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

 

 

for 文の回数を減らして結果を観察する

 

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

 

 

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

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

 

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

 

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

 

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

 

否定の式

 

 

実行してみましょう。
玉が当たったブロックが次々と消えていくのを確認しましょう。

 

玉とブロックが当たったらブロックを消す

 

 

玉を跳ね返らせよう

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

 

玉は4方向から飛んでくる

 

 

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

 

玉の跳ね返りの処理

 

 

跳ね返りの処理をシンプルにするため、3つのパターンだけにしました。
移動前の玉がどの位置にいたかで分けてます。
・ブロックの幅の中にいた場合
・ブロックの高さの中にいた場合
・それ以外

 

玉の跳ね返り処理を3つのパターンに分ける

 

 

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