About LifeGame by VBA

ライフゲームはイギリスの数学者コンウェイの創案で、1970 年頃に多くの人によって発展的に取り上げられました。ゲームと名が付いていますが、実際はシミュレーションであり、またセルラ・オートマトンと呼ばれる理論の一種とも言えます。

簡単な説明をしておきます。ライフゲームは無限に広い「ますめ」(WINDOWS に付属のゲーム、マインスイーパの盤を想像してもらえばよいでしょう)に、初期世代としていくつかの石を配置します。石は生物のように「生存」「死滅」「誕生」を繰り返します。その規則は

  1. [生存] := ある石の周囲 8 マスに、石が 2 個または 3 個あれば、その石は次の世代に生き残る
  2. [死滅] := ある石の周囲 8 マスに、石が 1 個以下または 4 個以上あれば、その石は次の世代に死ぬ
  3. [誕生] := ある空ますの周囲 8 マスに、石がちょうど 3 個あれば、そのますに次の世代で石が誕生する

というものです。肝心なのはこれらすべてが「同時に」起こることです。したがって、碁石などでシミュレーションをしようとすると、このうえない細心の注意を払っても完璧にこなすことは難しいかもしれません。そこで、これまではコンピュータプログロムによる解析が中心でした。

近ごろは CPU の性能が上がったので、表計算ソフトでもシミュレーションができます。表計算ソフトはあらかじめ「ますめ」を持っているので都合が良いと思います。と言っても、全くプログラムなしではライフゲームを実現できないので、Excel の VBA でマクロを組んでみました。

ここからファイルをダウンロードして、自由に試してください(プラウザ上でファイルを開くことができるかもしれませんが、これはダウンロードして実行することが前提のファイルです)。

ところで、VBA のコードは極力短く書いてあるので、非効率この上ない動作をします。詳しくは実際のコードをながめてもらえば分かるでしょう。処理速度が遅いコンピュータではイライラさせられること請け合いです。まず「1 世代先だけ」の動作を見て、それにかかる時間と自分の忍耐を天秤にかけながら徐々に「世代数」を増やすのがよいと思います。

しかしコードが非効率なだけに、チューンアップの余地が山のようにあることは確かです。それは各自の楽しみということで、是非コードを書き換えてください。ちなみに、この [[ VBA 版ライフゲーム ]] は Microsoft Excel 97-2004 以降のバージョンで動作するはずです。Mac OS + Excel 2011, 2016 でのみ動作確認をしただけですが、Windows でも動作すると思います。

一応、[[ VBA 版ライフゲーム ]] の仕様を簡単に述べておきます。

  1. ますは 40×40 の大きさで、薄い水色になっている最外周のますには石(* アスタリスク)は表示されません。また、赤い点線は 20×20 の小区間を示している以外の意味はありません。
  2. 各セルは列幅・行高とも 10ポイント程度に縮めてあります。シートも 83% の縮小表示にしてあります。列幅・行高などは適宜変更してもらってかまいません。
  3. 「スタートボタン」横に、何世代先までシミュレートさせるかを入力するフィールドがあります。はじめは 1 や 2 といった小さな数で試してください。そうしないと CPU 性能が低いコンピュータの場合は、悲惨なことになるからです。
  4. 「スタートボタン」下には、シミュレートを中断させるためのボタンがあります。CPU 性能が低いコンピュータでは即座に反応しないかもしれません。この仕様を変えるならコードを変更してください。
  5. ワークシートは「CellAuto」と「Samples」の 2 枚があります。「CellAuto」シートは、1 世代ごとの変化をみるものです。あらかじめ初期配置をしてありますが、中央の模様が 16 世代後にそれぞれ 4 機のグライダーになって、周りの 4 つの模様に衝突するものです。「Samples」シートは代表的な初期配置を記録しておきました。コピーして利用するとよいでしょう。
  6. コードを見てもらえば分かるとおり、計算対象のますは 40×40 のすべてですが、* を表示させるのは内側の 38×38 のますです。したがって、最外周のますに * が接近すると正しい計算ができなくなります。ますの領域を増やすならコードを変更してください。

ところで [[ VBA 版ライフゲーム ]] は、コードが簡単で分かりやすいけれど低速です。そこで、コードはやや複雑だけれど、それより数十倍速いものも用意しました。

チューンアップに興味がなければ、こちらを試してください。しかし、このことはチューンアップの余地がないことを意味しないので、性能を上げたければ是非そうしてください。FieldSize(ますの一辺のセル数)は可変で、最大 256×256 の大きさまで対応しています。ただし、メモリが少ないとエラーが発生します。その場合は FieldSize を小さめに設定して実行してください。ちなみに、こちらの [[ VBA 版ライフゲーム2 ]] は Microsoft Excel 97-2004 以降のバージョンで動作するはずです。Mac OS + Excel 2011, 2016 でのみ動作確認をしただけですが、Windows でも動作すると思います。