迷路ゲームのプログラミングその4
前回の「迷路のステージを作る」では、背景のキャンパスに迷路を作る方法について解説しました。ここまででスクラッチキャットの移動・ゴールの設定・迷路ステージが完成したので、もう少しです。今回はスクラッチキャットが壁を通り抜けてしまっているので通り抜けできないようにプログラムを作っていきます。
4. 壁を通り抜けさせない
スクラッチキャットが壁を通り抜けできないようにするにはどのような条件を加えればいいでしょうか。
方法はいくつもありますが、今回は条件として色を使います。現在、作成した迷路ステージは青色の壁になっていますので、「もしスクラッチキャットが青色に触れたらときは指定した歩数だけ下がる」というプログラムを作れば、壁を通り抜けできません。

「もし~したとき」といった条件を設定したい場合は、ブロックパレットのの中にある
を使います。
条件は「青色に触れたら」になりますので、の中には「青色に触れたら」のブロックを入れます。この青色に触れたらに合うブロックとして
の中にある
が用意されています。
色を変更する場合は、の■をクリックするとカーソルが
に変わりますので、この状態で設定したい色の上までカーソルを合わせてクリックします。
すると色がクリックしたときの色にかわります。これで、ブロックの設定する色と壁の色を同じ色にすることができ「もし青色(壁の色)に触れたら~する」というプログラムが完成します。
そしての中には条件に一致した場合処理するブロックを入れますが、「指定した歩数だけ下がる」ので、
の中にある
を入れます。
「指定した歩数だけ下がる」ということはマイナスの数値を入れるとスプライトの向きと逆の方向に進むので、設定する数値はマイナスで「-10」を設定してみます。
ただし、このままの状態では、一度が処理されたらプログラムは終了してしまいます。矢印キーで動かしている間、常にチェックする必要がありますので、ずっとプログラムを処理し続けなければいけません。そんなときには
の中にある
を利用します。
こちらのスクリプトを実行して矢印キーを押して移動してみましょう。左右に進む場合は壁は通り抜けできませんが、上に壁がある場合は壁をすり抜けてしまったり、壁から抜け出せなくなったりしたかと思います。
こういった意図しない動きはバグと呼ばれます。なぜ上下の場合に意図したい動きをするかというとスプライトの向きが関係します。
はスプライトが向いている方向に進むブロックです。左右に移動するブロックには、
を設定して向きを変えていますが、上下に移動するブロックには設定していません。
つまり上の壁に当たったときは、スプライトは右向きあるいは左向きの状態ですので、-10歩下がると左もしくは右へ移動するため、おかしな動作になります。
上の壁に当たった場合は、下に10歩さがりたいので、向きを上にしておく必要があります。よって、「上向き矢印キーが押されたとき」と「下向き矢印キーがおされたとき」に向きを追加しましょう。
これで上下左右移動しても壁に触れようとすると進まなくなります。
今回のプログラミングでは、物体(スクラッチキャット)と物体(壁)があたったかどうかを判定するプログラムを作りましたが、このような処理を「衝突判定」と言います。
例えば飛行機のシューティングゲームの場合、機体に弾が当たったらゲームオーバーになりますよね。あれも物体(機体)と物体(弾壁)があたったかどうかの「衝突判定」のプログラムが同じような形で作られています。
先ほど上下左右で通り抜けできなくなると説明しましたが、それでも中には右上・右下・左上・左下といった斜めに進ませると壁をすり抜けてしまったり、壁から抜け出せなくなったりする場合があります。
こういった場合は、壁の厚みを厚くしたり、歩数を小さくしたり、他のプログラムを追加する必要があります。今回はまだはじめのほうですので、このままの状態で進めていきますが、どうしても気になる方はバグにならないプログラムを考えて見ましょう。
ここまででほぼ迷路ゲームとしては完成ですが、他の人が遊べるように最後の設定をしていきます。