Prev / Next / カメ太の日記

増殖シミュレーション(2)[dolittle]

2009-02-13

life

1/31に紹介した増殖シミュレーションでは、メソッドをサブルーチンのよ
うに使っていました。プログラムを細かくメソッドに分ける書き方は、慣
れると読みやすいのですが、慣れないとわかりづらいかもしれません。

「難しくて読めない」という感想をいただいたため、次のように展開した
プログラムを紹介しました。プログラムの流れとしては、こちらのほうが
わかりやすいですね。一方、それぞれの部分が何をしているかは、「ここ
は動かしている」「ここは成長させている」「ここは消滅させている」な
どの意味を自分で考える必要があります。

// パラメータ
成熟=16。
寿命=50。

// すべてのカメの性質を定義 (1:メス、2:オス)
タートル:誕生=「
  年齢=1。性別=乱数(2)。
  「性別==1」!なら「自分!"ayumiKiiro.gif" 変身する」そうでなければ「自分!"ayumi.gif" 変身する」実行。
  時計=タイマー!作る。
  時計!「
    自分!(乱数(180)-90)右回り 10 歩く。
     年齢=年齢+1。
    「年齢>=:寿命」!なら「時計!中断。自分!消える」実行。
  」実行。
」。

タートル:衝突=「|相手|
  「全部!(性別==1)(相手:性別!=性別)(相手:年齢>=:成熟)(年齢>=:成熟)本当」!なら「
    自分!作る 誕生。自分!作る 誕生。自分!作る 誕生。
    時計!中断。自分!消える。相手:時計!中断。相手!消える
  」実行。
」。
タートル!ペンなし。

// 最初の10匹
タートル!作る 誕生。タートル!作る 誕生。タートル!作る 誕生。タートル!作る 誕生。タートル!作る 誕生。
タートル!作る 誕生。タートル!作る 誕生。タートル!作る 誕生。タートル!作る 誕生。タートル!作る 誕生。



このプログラムを作ったきっかけは、ねずみ算のシミュレーションについ
ての質問でした。基本的には倍々にしていけばよいのですが、2のn乗にな
るので、そのままでは2+4+8+16+...という形になって、2匹から始めて26回
程度の増殖で日本の人口並に増えてしまいます。デフォルトの0.1秒間隔の
タイマーで実行すると、わずか2.6秒後です。ドリトルのタートルが普通に
動くのは数百個が限度でしょうから、あっという間に遅くなって実質的に
止まってしまいます。そこで、このプログラムでは、寿命を設定したり、
偶然の出会いの要素を入れて、「少しの間楽しめて、運がよければ増殖し
て栄える」形にしてみました。

permlink