Scratchで迷路ゲーム。最後となる今回は何もしなくてもペンギン君が自動でゴールを探索して動いていくというプログラムをつくりたいと思います。
なお毎度のことながら、ここから読み始めた人はシンプル版の迷路ゲームの作り方も一読しておいてください。

Scratch(迷路ゲーム:ゴール自動探索版)
完成版はこちら
プログラムの中身はここから確認できます。
プログラムの説明
基本的な考え
さてプログラムの基本的な考え方です。今回は左手の法則という迷路解決における基本的なアルゴリズムを使います。
これは、迷路において壁に左手(または右手)をつけて歩いていけば必ずゴールにたどり着けるという解決法で、左手の法則(逆の場合は右手の法則)といいます。
この処理の流れをフローに表すとこうなります。
さて、このフローをみてもイメージがつかめないですよね。実際にペンギン君がどう動くのかをフローに沿ってみてみましょう。
この絵からわかる通り、ある方向に向かって5歩進む。その時に進んだ先に壁があるかないかで条件分岐、壁があるなら5歩下がって右に90度回転。壁がなければ左に90度回転して、ループが一回まわります。これをゴールまで続けるのですが、つまり、壁に当たったら、それ以上その方向には動けないので、他の方向に進もうとする。逆に壁に当たらなかったら、左を向いて壁があるか確認するアクションを起こす(左手で触る)というアルゴリズムを実現しています。
なお、実際のコードではペンギン君がくるくる回転しないように最初に回転しないという処理をいれているのでこの絵のようには見えないですが、処理としては裏でこうなっています。
実際、このコードを入れないとペンギン君がくるくる回りながら進むのですが、あるところで先に進めなくなります。これはまあ迷路の幅とペンギン君の大きさで壁にあたるという判定がちょっとおかしくなってしまうんですけどね。
スプライトの説明
というわけでスプライトの説明ですが、登場するのはペンギン君のみです。
ペンギン君
ペンギン君の処理は以下のとおりです。
処理の内容についてはプログラムの基本的な状態のところで説明した通りです。今回、ちょっと違うところとしてはゴールの判定を入れていて、このゴールの判定はサブルーチンとして別出ししているというところです。一緒にいれてしまってもいいですが、こうやって別だしするとわかりやすいですよね。
まとめ
ということで、今回はペンギン君が自動でゴールに向かうプログラムを書いてみました。ちなみにこの回転を逆にすると、今度はペンギン君が勝手にスタートに向かうプログラムになりますよ。
いかがでしたか、勝手にゴールまで進むなんて、まさに、これぞプログラムって感じですよね。こういった、特定の手順を踏んで勝手に動いていくというのは、お掃除ロボットのルンバなどにも通じますよね。
一旦、迷路ゲームのプログラムについては、今回で終わりとしますが、ちょっと気が向いたら迷路を自動で作成するプログラムについても投稿してみたいとおもいます。いつの日か・・・。
コメント