第13回 考える楽しさ、習う楽しさ「5.迷路を作ろう その3」
|
|
13−5 迷路を作ろう その3
その2で作られる迷路は、合格レベルのモノでしたが、落ち着いてみてみると、あることに気がつきます。 それは、単なる「点」の部分が多い、ということです。 ![]() ここでは、この「単なる点」の部分を減らすことを考えてみましょう。 このような単なる点ができる理由は、比較的簡単に理解できます。 この単なる点も、迷路の仕組み上、基点の1つですから、プログラム上は、順に検索されている筈ですが、そこから隣の方向をランダムで決めているため、例えば、次のような状況でも検索処理を終了してしまいます。 ![]() 例えばこの状態で、右方向を注目、と乱数で決まれば、いくら空き方向が3つも残っている「もったいない」状況でも、検索は終わってしまいます。 そこで、この隣の空情報を徹底的に検索する方法を考えてみることにしましょう。 方法はそれほど難しくありません。最初にランダムで決めた隣方向に既にブロックが置いてあれば、別の隣に方向を変えるだけです。 ただし、この「別の隣」を決めるときに、再びランダムで決めてしまっては、あまり賢くありませんので、今回は、時計回りの方向に順に検索してみることにしました。 ![]() 隣を決める部分、先ほどの「その2」では、このような流れになっていました。 ![]() ここでは、隣方向を検索する部分を追加することで、こんなフローチャートが考えられます。 ![]() ちょっと、複雑になりそうですが、早速プログラミングしてみましょう。 他の部分には、あまり手を加えなくてもよさそうなので、前のプログラムをできるだけ残すような形で追加変更してみました。
更に長くなりましたが、追加された部分はわかるでしょうか?それほど多くはありませんね。 追加部分に伴って、注目する隣の方向転換した回数をチェックするために、cTというカウンタ用の変数を追加しました。 さて、早速、実行してみましょう。 ![]() おお!その2で作ったものより、明らかに複雑になりましたね。 むしろ、改造した手間に比べると、劇的な進化をしたような感じすらします。 もちろん、徹底的な検索のおかげで、前のものに比べると、単なる点だけのブロックが少なくなったのがよくわかりますね。 実はこの迷路ルーチン、私の3D迷路を歩くだけのアプリ「AMP」で使っているものです。 この辺りになると、実用的な迷路になると思いますが、今回は、欲張ってもう1歩先を目指してみることにしましょう。 |
|
第13回 考える楽しさ、習う楽しさ「5.迷路を作ろう その3」
|