Scratch(迷路ゲーム:ゴール自動探索版[左手の法則])

迷路ゴール自動探索プログラム

Scratchで迷路ゲーム。最後となる今回は何もしなくてもペンギン君が自動でゴールを探索して動いていくというプログラムをつくりたいと思います。

なお毎度のことながら、ここから読み始めた人はシンプル版の迷路ゲームの作り方も一読しておいてください。

Scratch(迷路ゲーム:シンプル版)
Scrathのサンプルプログラムを何個か作ってUPしてきましたが、今回はとてもシンプルな難易度が低いものを作ってみたいと思います。 Scratch(迷路ゲーム:シンプル版) ということで迷路ゲームです。スプライトは1つだけといったとても...

 

Scratch(迷路ゲーム:ゴール自動探索版)

完成版はこちら

プログラムの中身はここから確認できます。

https://scratch.mit.edu/projects/362421249

 

プログラムの説明

基本的な考え

さてプログラムの基本的な考え方です。今回は左手の法則という迷路解決における基本的なアルゴリズムを使います。

これは、迷路において壁に左手(または右手)をつけて歩いていけば必ずゴールにたどり着けるという解決法で、左手の法則(逆の場合は右手の法則)といいます。

 

迷路ゴール自動探索全体説明01

 

この処理の流れをフローに表すとこうなります。

迷路ゴール自動探索全体説明02

さて、このフローをみてもイメージがつかめないですよね。実際にペンギン君がどう動くのかをフローに沿ってみてみましょう。

迷路ゴール自動探索全体説明03

この絵からわかる通り、ある方向に向かって5歩進む。その時に進んだ先に壁があるかないかで条件分岐、壁があるなら5歩下がって右に90度回転。壁がなければ左に90度回転して、ループが一回まわります。これをゴールまで続けるのですが、つまり、壁に当たったら、それ以上その方向には動けないので、他の方向に進もうとする。逆に壁に当たらなかったら、左を向いて壁があるか確認するアクションを起こす(左手で触る)というアルゴリズムを実現しています。

なお、実際のコードではペンギン君がくるくる回転しないように最初に回転しないという処理をいれているのでこの絵のようには見えないですが、処理としては裏でこうなっています。

迷路ゴール自動探索全体説明04

実際、このコードを入れないとペンギン君がくるくる回りながら進むのですが、あるところで先に進めなくなります。これはまあ迷路の幅とペンギン君の大きさで壁にあたるという判定がちょっとおかしくなってしまうんですけどね。

スプライトの説明

というわけでスプライトの説明ですが、登場するのはペンギン君のみです。

ペンギン君

ペンギン君

ペンギン君の処理は以下のとおりです。

cratch-maze-goal-search-ペンギン君

処理の内容についてはプログラムの基本的な状態のところで説明した通りです。今回、ちょっと違うところとしてはゴールの判定を入れていて、このゴールの判定はサブルーチンとして別出ししているというところです。一緒にいれてしまってもいいですが、こうやって別だしするとわかりやすいですよね。

まとめ

ということで、今回はペンギン君が自動でゴールに向かうプログラムを書いてみました。ちなみにこの回転を逆にすると、今度はペンギン君が勝手にスタートに向かうプログラムになりますよ。

いかがでしたか、勝手にゴールまで進むなんて、まさに、これぞプログラムって感じですよね。こういった、特定の手順を踏んで勝手に動いていくというのは、お掃除ロボットのルンバなどにも通じますよね。

一旦、迷路ゲームのプログラムについては、今回で終わりとしますが、ちょっと気が向いたら迷路を自動で作成するプログラムについても投稿してみたいとおもいます。いつの日か・・・。

コメント

タイトルとURLをコピーしました