DxLibを使用したライフゲームの学習

この記事はSYSKENAdventCalendar2016 10か目の記事です。

黒雨です。
今回は最近趣味で勉強している「生命工学」に関するプログラミングについて記事を書こうと思います。
なにぶん勉強し始めたばかりなので(というか、「生命工学・プログラミング」で勉強できるサイトをなかなか見つけられなかったので)少し短くなるかもしれませんがご了承ください。

何をしたのか

今回は(先ほども言いましたが)勉強し始めたばかりなので、DxLibを使用して容易に作れる「ライフゲーム」という簡単なシミュレーションゲームを作りました。

ライフゲームとは

「ライフゲーム」というのは、えーりん先生のスペルカードの一つ簡単に説明すると、イギリスの数学者ジョン・ホートン・コンウェイが考案した、生命の「誕生・進化・淘汰」といったプロセスを簡易モデルで再現するシミュレーションゲームです。
ライフゲームは元々、空間・時間が不連続な場合、どのような世界が形成されるのかといった数学的なテーマを元にした、初期条件が与えられた場合の時間経過による変化を求めるアルゴリズムの研究に使われているそうです。
しかし、現在は時間経過によって変化していく生命の様子を観察し、画面上に現れる様々なパターンを楽しむシミュレーションゲームとして広まっているようです。シミュレーションゲームといっても、ただただ変化を眺めるだけの内容ですが(ここ重要)

今回は時間もなかったのでとあるサイトのソースプログラムをそのまま使わせてもらいました。(こちら)
シミュレーションの条件は(リンク先にも書いてますが)「1つの生点(赤丸)の周囲に、2~3つ生点があれば生存、1つしか生点がなければ過疎で死滅、5つ以上なら過密で死滅。また、死点(黒い部分)の周囲に3つ生点があれば誕生」という内容です。このプログラムは、少しC言語をかじった人ならDxLibを導入すれば簡単に作成・実行・変更ができます。

simu0
シミュレーション開始直後は生点がたくさんありますが、これは生物的にみると同種族が一定範囲内に溢れかえっている状態です。
同種族が増殖すれば、その中から必ず淘汰される存在が現れ、全体的な数は減少します。
simu1
死点の数が増えてくると、生点は死滅と誕生を繰り返しながら移動していき、互いにある程度間隔を取っていくつかのまとまりを作ります。
生物的にみると、繁殖と淘汰を繰り返していくつかのコロニー(集団)を形成している状態ですね。
simu2
simu3
最終的にはこの2つの画像のパターンを繰り返すようになります。生物的にみると、それぞれのコロニーが安定して存在している感じですね。

結局、これは何なのか

最初に説明した通り、生物の誕生・淘汰をただ眺めるだけのシミュレーションゲームだと思ってくれればいです。(深く学ぼうとすると話は変わってきますが、表面に触れる程度なら、このくらいの認識でも大丈夫です。)
私がブログに載せたライフゲームでは単一種族でのシミュレーションしかできませんが、初期条件を変更することでより複雑であったり、より面白いパターンを作り出すことも可能なようです。
稚拙な文章で長々と書いてしまいましたが、読んでいただいてありがとうございました。
私自身も学習を始めたばかりなので、もしかすると見当違いのことを書いているかもしれませんが、その場合は何処を間違えているのか教えていただけると幸いです。
また、生命工学の学習について書かれているサイトをご存知なら、こちらについての情報もいただけるとありがたいです。


コメントを残す

メールアドレスが公開されることはありません。