4. ネコを動かす

← 目次に戻る

< 3. ネコの遺伝子をつくる 5. りんごからの距離を計測する >

遺伝子を作ったあとの処理を見ていきます。

figure 10

「世代の最大値」に設定した値(100000)まで、以降の処理を実質半永久的に繰り返します。

100匹のネコそれぞれを区別するため、1から100の「ネコのID」を割り当てます。

「リストをリセットする」で、「距離のリスト」と「障害物にぶつかっているか?」の2つのリストをリセットしています。「リストをリセットする」の中身は以下の通りです。

figure 13

「『距離のリスト』をすべて削除する」と「『障害物にぶつかっているか?』をすべて削除する」でリストの中身を削除したあと、ネコの数分だけ空の値で両方のリストを埋めています。Scratchのリストは、リストの値に何かしら値が入っていないと、途中の値を入れ替えるという操作ができないからです。

リストをリセットしたあとは、ネコの数分だけ「『自分自身』のクローンを作る」でクローンを作っています。このとき、「ネコのID」を1ずつ変えています。

figure 14

ネコがクローンされると、隠していたネコを表示し、「ネコを動かす」ブロックを呼んで、遺伝子の指定どおりにネコを動かします。

figure 7

「ネコを動かす」の処理は少し長いので前半、後半に分けて解説します。まずは前半部分です。

figure 15

最初に「x座標を0、y座標を0にする」でクローンされたネコをステージの中心に移動させ、そこからスタートさせます。

続く

figure 18

の部分は少しややこしいです。

まず変数 i を用意して、1をセットしています。

次に「遺伝子のリスト」の「ネコのID」番目の遺伝子に注目しています。これはたったいまクローンされたばかりのネコの遺伝子にあたります。

ループの最後で i を1ずつ変えており、「遺伝子のリスト」の「ネコのID」番目の遺伝子の長さだけ繰り返し、遺伝子の i 番目の文字を「動き」という変数にセットしているということは、遺伝子の DUUDRLU.. といった文字列を一文字取り出して、変数「動き」に入れているということなのです。

「動き」が U ならば、ネコを上に動かします。「0度に向ける」、つまりネコを上に向けて、「移動距離」だけ y 座標を変えています。

あとで説明する障害物の上下のy座標および左右のx座標が入っている変数を利用し、ネコが障害物に衝突したら、逆方向に移動させることでそれ以上障害物に侵入できないようにしています。

figure 19

また、衝突したネコのコスチュームを「衝突したネコ」(赤色のネコ)に変えることで、どのネコが障害物に衝突したかがわかるようにしています。

そして障害物に衝突したネコには、あとでりんごからの距離を計算するときにペナルティが加算されるので、「障害物にぶつかっているか?」リストの「ネコのID」番目に「はい」をセットして、どのネコが衝突したかがわかるようにしています。

「動き」が D の場合、つまりネコを下に動かすときは、方向が逆なだけで、やっていることはネコを上に動かすときとほぼ一緒です。

「ネコを動かす」の後半部分です。

figure 16

「動き」が R と L の場合ですが、ネコを動かす向きが横方向で、y座標でなく今度はx座標を変化させる以外は U と D のときとほぼ一緒です。

ループの最後では i を1変化させ、そして最初に戻って遺伝子の次の文字を読み取りネコの次の動作を決めます。

こうして、遺伝子の最初から最後まで読み取り、各クローンに遺伝子が示す通りの一連の動きをさせます。

最後に途中でてきた「障害物」のスクリプトを解説します。

figure 20

緑の旗がクリックされ、スクリプトが開始されたら、障害物の上下左右の座標をそれぞれの変数にセットし、オレンジ色のペンで四隅を直線でつなげて縦長の長方形の障害物をステージ上に描いています。

figure 21

< 3. ネコの遺伝子をつくる 5. りんごからの距離を計測する >

← 目次に戻る