Prev / Next / カメ太の日記

迷路抜けプログラム[dolittle]

2009-01-10

maze

ドリトルで迷路抜けプログラムを作ってみました。
アルゴリズムは次の簡単なルールです。
・右に壁がなければ右を向く。
・前に壁があれば左を向く。そうでなければ前に進む。

ゴールに到達すると動きが止まり、メッセージが表示されます。
壁の座標は80の倍数になるように配置します。

// 迷路を描く
カメ太=タートル!作る 20 線の太さ。
「カメ太!480 歩く 90 右回り」!4回 繰り返す 図形を作る -240 240 位置。
横線=カメ太!80 歩く 図形を作る 1000 1000 位置。
縦線=横線!作る 90 右回り 1000 1000 位置。

横線!作る -240 160 位置。
縦線!作る -160  160 位置。
横線!作る -240 80 位置。

横線!作る -80 160 位置。
縦線!作る -80  160 位置。
縦線!作る -80  80 位置。
横線!作る -80 0 位置。

横線!作る -240 -80 位置。
横線!作る -160 -80 位置。
横線!作る -80 -80 位置。

横線!作る -240 -160 位置。
横線!作る -160 -160 位置。
横線!作る -80 -160 位置。

横線!作る 0 80 位置。
横線!作る 80 80 位置。
縦線!作る 80  80 位置。
縦線!作る 80  0 位置。
縦線!作る 80  -80 位置。
縦線!作る 80  -160 位置。

// スタート位置
カメ太!ペンなし -200 200 位置。

// 探索メソッドたち
カメ太:前進=「
「自分!右壁なし?」!なら「自分!90 右回り」実行。
「自分!前壁なし?」!なら「自分!80 歩く」そうでなければ「自分!90 左回り」実行。
」。

カメ太:右壁なし?=「
tmp=衝突。flag=はい。衝突=「flag=いいえ」。
自分!90 右回り 40 歩く 40 戻る 90 左回り。
衝突=tmp。flag。
」。

カメ太:前壁なし?=「
tmp=衝突。flag=はい。衝突=「flag=いいえ」。
自分!40 歩く 40 戻る。
衝突=tmp。flag。
」。

// ゴール
ゴール=縦線!作る 240  -160 位置(黄)塗る。
ゴール:衝突=「時計!中断。ラベル!"おめでとう!" 作る 24 文字サイズ(赤)文字色 0 280 位置」。

// 実行
時計=タイマー!作る 50 回数「カメ太!前進」実行。

permlink