第11回 何か作ってみよう「4.ムシのアイデンティティー」

11−4 ムシのアイデンティティー

では、ムシの処理です。
唐突ですが、「1匹のムシが居る」とはどういう事でしょう?哲学か心理テストのようですが、これらについて考えてみます。

1匹のムシ、と聞いてまずは、

   (ムシです)
  • どんな姿をしている?
  • どこにいる?
という程度は思い浮かぶでしょう。そう、場所と姿が彼(彼女)の最低限のアイデンティティーを確立します。
その他、詳しく考えると、
  • どちらを向いている?
  • どうやって移動する?
  • どれくらい移動する?
  • 現在の状況はどうか?
おおよそ、彼(彼女)の性質から身辺調査に至る内容を列挙しましたが、ま、この程度にしておきましょう。
もちろん「何を考えている?」ってのは、今からプログラミング内容になりますので、省いてあります。
こんなことをして、どうなるの?と思うかもしませんが、要は、ムシの表示や移動に関して、どのような変数が必要になるか、という事を考える材料なのです。つまり1匹のムシで、次のような属性を考えなければ、プログラム上、表現できないわけですね。
  • どんな姿をしている? → 画像ID
  • どこにいる?     → 現在の座標
  • どちらを向いている? → 向き
  • どうやって移動する? →(直線的に)
  • どれくらい移動する? → 移動量
  • 現在の状況はどうか? → 周囲の状況
1つ「どうやって移動する」というのは、どちらかといえば性質的な話ですが、現在、いる位置から、ジャンプしたりワープしたりしないという「仕様」と考えておけば良いでしょう。
こんな感じで、必要とされる属性、いや、変数の雛型が出来たわけです。これを、早速、このムシがいるべき世界、先ほど作った土台にあてはめて具体化してみます。

最初の設定から、ムシは、壁にぶつかったら曲がって方向を転換する事になっていました。この曲がる動作も、直角に曲がることにしましょう。そうすると、ムシは、上下左右の4種類の値があれば、向きを表す事が出来そうです。また、移動量は、土台のマス目を使いますので、ま、10ピクセル単位での移動が妥当でしょう。 現在の座標も、比較的簡単に設定できますね。移動量が10ピクセルなので、基本的には、ブロックの座標と同じ系になります。 また、周囲の状況、といってもブロックの有無だけですが、これは、グローバル変数 Maze(i,j) を参照すれば良さそうです。 どうでしょう?姿以外の部分については、それほど難しくないですね。
  • どんな姿をしている? → 画像ID   → ?
  • どこにいる?     → 現在の座標 → マス目の中
  • どちらを向いている? → 向き    → 上下左右何れか
  • どうやって移動する? →(直線的に) → まっすぐ移動、直角に曲がる
  • どれくらい移動する? → 移動量   → 10ピクセル
  • 現在の状況はどうか? → 周囲の状況 → 壁か何も無いか
残るは、ムシの姿です。今までの話を組み合わせると、壁に当たると向きを変え、その方向は上下左右の4種類、ということですので、姿は4種類用意しなければなりません。1種類だと横歩きや後ろ歩きです。ということで、ムシには、4つの画像が必要になります。
  • どんな姿をしている? → 画像ID   → 上下左右の向き対応する4枚の画像
画像、といえば、画像IDの設定次第でプログラムが楽になる、という事をブロックの所で知りましたので、今度は少し賢くなりましょう。
ムシの向きは「ムシの向き」によって決まります(あれ?)、なので、ムシの向きの設定が画像IDに影響を及ぼしそうです。
今回作ろうとしているのは、壁にぶつかったら直角に曲がる、としました。では、どの方向に曲がるかを考えてみると、一番単純なのは、ぶつかったら、右に曲がる、という一方的なものです。
そう、左から右へ歩いて壁に当たれば、向きは、下になります。下に向かい歩いていて当たれば左になります。
つまりムシの方向は、最初に右を向いていたとすれば、右→下→左→上→右→・・・となります。これをそのまま、数値化して

    向き:右=1、 下=2、  左=3、  上=4

とすれば、ぶつかったときの処理は、次のように結構単純にできそうです。

    

ちなみに、この処理は、全体の処理(予想)の一部分です。

    

さて、そうすると、画像IDに割り当てる番号、つまり、画像を読みこむ順は、右、下、左、上を向いた画像の順になるように読みこめば良いですから、先ほどプログラムの続きであれば、右向きの画像が1006になり、順に1007、1008、1009となるように読み込めば良いわけです。

    向き:右=1、 下=2、  左=3、  上=4
    画像:(1006) (1007) (1008) (1009)
    画像ID = 1005 + 向き

これで、画像IDと向きの関係もスッキリしました。
ま、NS BasicのVer.2になって、画像の参照ボタンが付き、後からの変更が楽に出来るようになりましたので、それほど意識しなくても良くなったのが嬉しいことですね。
さて、まとめてみると、次のようになりました。
  • どんな姿をしている? → 画像ID   → 上下左右の向き対応する4枚の画像 → 右(1006)、下(1007)、左(1008)、上(1009)
  • どこにいる?     → 現在の座標 → マス目の中
  • どちらを向いている? → 向き    → 上下左右何れか → 右=1、下=2、左=3、上=4
  • どうやって移動する? →(直線的に) → まっすぐ移動、直角に曲がる
  • どれくらい移動する? → 移動量   → 10ピクセル
  • 現在の状況はどうか? → 周囲の状況 → 壁か何も無いか → 現在位置に対する、Maze()の値を参照する
これでなんとか、1匹のムシの動きを楽に表現する事が出来そうです。う・・・ちょっと、まわりくどかったですか・・・?

戻る     目次へ     次へ

第11回 何か作ってみよう「4.ムシのアイデンティティー」