スポンサーリンク
Scratch

Scratchで迷路を解くプログラムを作ろう

Scratch

迷路を解くプログラムを作ってみます。
通路を総当たりで進んで、いつかゴールにたどり着くプログラムです。
わりと簡単なプログラムで作ることができます。

スポンサーリンク

プログラムの概要

迷路を自動で解くプログラムを考えてみたいと思います。
自動でとはいっても、人間の様に最短のコースを見つけるような仕組みではありません。
通路を総当たりに通って、いつかゴールにたどり着くプログラムです。

では、どんな風に通路を進んだら総当たりになるのでしょうか。
例えば、ずっと壁沿いに進んでいくとどうでしょう。
人が洞窟に迷い込んだとき、左手でずっと壁を触りながら歩いていくと、いつか必ず出口にたどり着きます。
この仕組みをプログラムで作ってみたいと思います。

この仕組みの場合、ゴールが不可能な場合もあります。
例えば、出口が広い部屋の真ん中にある場合はいくら壁沿いに歩いてもゴールにたどり着きません。
または、
スタート時点で、出口につながっていない壁沿いからスタートした場合です。
例えば、部屋の真ん中に立っている柱に手をついてしまった場合、同じところをぐるぐる回り続けてしまいます。

左手沿いに進むロジック

迷路の形はなんでもいいのですが、イメージしやすいように下のような迷路を想像してください。
※背景に標準で用意されているものを使っています。
 20pxの方眼紙に緑の色を塗って迷路を作りました。

緑色の部分が壁で、内側の白い部分が通路です。
この通路を総当たりで進むプログラムを考えます。

進行方向に向かって左手沿いに
ズバリ、このようになります。

基本的な動きは、
上半分のプログラムです。


1.前に進む
2.進んだ先が壁(緑)だったら、戻る
3.戻ったときは右に向きを変える。
このパターンです。

ただ、これだけでは問題があります。
突き当たるまで、まっすぐ進み続けます。
途中に左に分かれ道があったときに、左に曲がる仕組みがありません。

そこで、後半部分を追加します。
前に進むごとに左に進んでみます。
左に壁があれば戻って向きを戻します。


※1秒待つは、今は考えなくてよいです。
 この後、1秒でコマずつ迷路を解く動きをさせるために入っています。

1.”でなければ”(壁にぶつからずに進んでいたら)左を確認するプログラムを実行します。
2.左に向きを変える。
3.進む
4.進んだ先が壁だったら戻る
5.戻ったときは右に向きを変える(元の方向を向く)

この仕組みで、左手沿いに通路を進んでいくプログラムになります。
実行するとこの様になります。

このプログラムで目的は達成したのですが、動きがイマイチです。
猛スピードで進むことと、1マスずつカクカク動くので、滑らかに動くように改造してみましょう。

滑らかに動かす

このように、滑らかに迷路を進むように改造してみましょう。

仕組みは割と簡単です。
紫の四角のスプライトは非表示にします。
ボールのスプライトを追加して、ボールが滑らかに動くようにします。

スプライトの設定はこのようにしておきます。

プログラムの大まかな仕組みは、次の2つを追加します。
1秒かけてBall(ボール)はスプライト1(紫四角)の場所に移動します。
スプライト1(紫四角)はBall(ボール)が触れたら次のマスに進むようにします。

スプライト1(紫四角)のプログラムはこちらです。

Ball(ボール)のプログラムはこちらです。

コメント

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