こんにちは。fujimuraです。
子供の頃よく迷路を作って遊んでいた時期がありました。
そしてよく「解いた経路が絵になる迷路が作りたい!」と思っていましたが、
作るのはとても大変で遂ぞ完成に至りませんでした。
そもそも作り方の発想自体でてこなかったのです。
そんなことをふと思い出した今日この頃、今ならプログラムでつくれるでしょ
と思い立ち実際に作ってみました。
調べてみると意外や意外、とても簡単に作れることが分かりました。
ですので、内容的には簡単ですが、
子供の頃を夢を一つ叶えたということでお付き合い下さい。
ということで今回は「絵が出る迷路を作ろう!」の巻です。
完成例
まず参考にしたサイトはこちらです。
そうです。調べましたよ。ええ、調べましたとも。
ということで、こちらを見て理解できた方はこの先見る必要ないのですが、
見るの面倒、見ても分からなかった、とにかく絵が出る迷路を作らせろ!
という方はこの先をご覧ください。
できるだけややこしそうな用語はなしで説明していきます。
また、最後に実際に迷路が作れるサンプルも用意していますよ。
まずは迷路の大きさを決めましょう。
今回は説明用に5×4にします。
そして各マスに通し番号を振っておきます。
01 | 02 | 03 | 04 | 05 |
06 | 07 | 08 | 09 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
解いた迷路の経路が絵になるようにします。
これが一番大変な気がしますね。
なにせ一筆書きで絵を描かなければいけないのですから。
今回は左上から右下にジグザグに通る経路にします。
正解の経路のマスを00とします。
さらに隣り合う00の壁を無くします。
00 | 00 | 03 | 04 | 05 |
06 | 00 | 00 | 09 | 10 |
11 | 12 | 00 | 00 | 15 |
16 | 17 | 18 | 00 | 00 |
これで正解ルートが完成しました。
あとは他の壁を適当に取り払って迷路っぽくしていけば完成です。
ただし、適当に壁を取り払うにはルールがあります。
ルール①
00以外のマスから選ぶ。
ルール②
同じ番号同士のマスの壁は無くさない。
これによりゴールまでの経路が複数パターンできるのを防ぎます。
ルール③
結合したマスの番号をそろえる。
壁を無くし結合されたマスの中で、一番小さな番号に揃えます。
ルール④
全てのマスが00になるまで繰り返す。
これでどこからも通れないマスを無くします。
これをプログラムを使い自動作成を行ったときどんな風になるか説明していきます。
例えば、05と10の間の壁をなくす事になったとします。
この時10の値を05に振りなおします。
|
→ |
|
次に05と04の壁を無くす場合はこうなります。
|
→ |
|
次に04(元04)と09が結合したとして
00 | 00 | 03 | 04 | 04 |
06 | 00 | 00 | 04 | 04 |
11 | 12 | 00 | 00 | 15 |
16 | 17 | 18 | 00 | 00 |
04(元09)と04(元10)の壁を無くす処理になったとしても、ルール②により処理は中止します。
|
→× |
|
04(元09)が00(元14)と結合すると、04は全て00となります。
|
→ |
|
これを全て00になるまで続けます。
00 | 00 | 00 | 00 | 00 |
00 | 00 | 00 | 00 | 00 |
00 | 00 | 00 | 00 | 00 |
00 | 00 | 00 | 00 | 00 |
あとは00を消し、スタートとゴールの印をつけて完成となります。
|
→ |
|
というわけで実際作った物がこちらになります。
お好みのサイズに設定してください。横:縦:
操作方法:
迷路のマスの上で、Shiftキーを押しながらマウスを動かすと経路が引けます。
迷路のマスの上で、Ctrlキーを押しながらマウスを動かすと経路を消せます。
出来上がったら下の「自動作成」のボタンを押してください。
いかがでしたでしょうか?
こんな風に簡単に迷路が作成できてしまうなんて、子供の頃は考えられませんでした。
お子さんがいる方は、アンパンマンやドラえもんの絵が出る迷路なんか作ってあげると、
とても喜ぶと思います。
一筆書きするのが大変ですがね。。。。
僕にも子供がいますが、まだまだ迷路ができる年ではないので、
もう少し大きくなったらプレゼントしたいと思います。
これを見てプログラム少しやってみようかなー、などと興味を持ってもらえると幸いです。
それではまた。
fujimura