第13回 考える楽しさ、習う楽しさ「2.迷路を作ろう まずは下準備など」
|
|
13−2 迷路を作ろう まずは下準備など
一言に迷路といっても、いろいろなパターンがありますが、今回は、こんな迷路を作ろうと思います。 ![]() 縦、横がそれぞれ外壁を含めて25x25ブロックで、目安として左上をスタートとして右下のゴールに向かって進むような迷路です。 別段、正解がいくつあっても構わない、という大らかな気持ちで作りましょう。 さて、実際のプログラムの流れとしては、
このような3つの手順が考えられますが、できるだけ、見た目で迷路ができる様子がわかるように、次の手順で作ってみました。
少なくとも、迷路が「成長する」様子を眺めたほうが楽しいですから、このように楽しみながら試すのも、必要ですね(笑) 次に、もう少し具体的な話ですが、迷路のデータは maze(x,y) (x=1〜25、y=1〜25)という2次元の配列変数を使うことにしましょう。 それぞれの意味ですが、
としておきます。 25x25ブロックの迷路ですから、Palmの画面を考えると、1ブロックが5x5ピクセル程度なら、全体が125x125ピクセルになり、十分に収まりそうです。 左上の横位置は、160-125 = 35、この半分で 17、上位置は同様に 160-125 = 35で、上のタイトルバーを考慮して、下に5ピクセルくらい空けて 30としておきましょう。 そうすると、maze(i,j)の位置のブロックは、四角く塗りつぶすコマンド FillRectangle を使って、
このように表せます。 壁があるところが maze(i,j)=1 ですから、ブロックを描く部分とセットにしてサブルーチン化しておくのが便利そうですね。 そこで、迷路を考える前に、予め、必要と思われる部分をサブルーチン化しておくことにしましょう。 新しいモジュールを1つ追加して、そこに次のようなコードを書いておきます。
これで、プログラム中から、
とするだけで、(15,15)の位置にブロックが描かれ、maze(15,15)には、1 が代入されます。 ただ、配列変数maze(i,j)は、このサブルーチン内でも参照しますから、この配列変数はグローバル変数として定義しなければなりません。 そこで、スタートアップに
と忘れずに入れておきましょう。 ブロックを置く処理の他には、初期設定もサブルーチン化しておきましょう。 まず、迷路の外壁は、どの場合でも存在しますから、これは、最初から描いてあっても問題ないですね。 ということで、1コマずつ使って描くより、大きな四角を描いて、中を白四角で消すというやり方で、外壁を一気に描いてみました。 ちなみに、1つ1つ描いていたら、遅くて大変だったという裏話も付け加えておきます。
まぁ、この2つがあれば、色々と試せるでしょう。 ということで、迷路を描く下準備が整いました。 後は、適当にボタンを配置して、そこイベントに「迷路を作成する」ルーチンを記述することになります。
ちょっと駆け足でしたが、下準備の部分は、それほど内容には関係ありませんので、これ以上の説明はしません。 必要な部分は、自分で考えてみてください。 |
|||||||||
第13回 考える楽しさ、習う楽しさ「2.迷路を作ろう まずは下準備など」
|