ライフゲーム(Conway's Game of Life)は,Conwayさんが1970年に発案した簡易生命シミュレーションゲームです.とても単純なルールではあるものの,そこから派生した難問に数多くの数学者たちが虜になったそう.今回はそのライフゲームをPythonで実装してみました.
何番煎じになるかはわかりませんが,GUI化して扱いやすくしてみたので,興味があればぜひ触ってみてください.
使っているライブラリはnumpyとwxPythonのみ.
実装環境
MacOS 10.15 Catalina
Python 3.7.4
wxPython 4.0.6
numpy 1.16.4
ちなみに開発はPyCharmで行っている.
実行
モットーは「main(関数)内はシンプルに」ということで,最低以下のコードがあれば実行可能.
from lifegame import GUILifeGame
game = GUILifeGame()
game.run()
これで,50×50のライフゲームが起動する (セルは全部死んだ状態).
from lifegame import GUILifeGame
game = GUILifeGame(f_shape=(10, 10), time_step=100)
game.run(init_rand=True, rate=0.2)
のように引数を指定すると,10×10のライフゲームが,初期状態「0.2の割合で生きているセル」で起動する.ちなみにtime_step
は,自動的に世代を進めるとき(Runボタン)の更新速度.
もちろん,セルをクリックすると生死を反転できる.試しにグライダーを生成してみると,
クリックしながらのドラッグには面倒なので対応していない (余力があればいつか実装する...かも).
解説
大まかな解説は僕の記事で行っているのでぜひ一読してみてください.
GUIのライフゲームを作ってみた【Python】| HIRO LAB BLOG
コード
コードはGithubにあげているので,ぜひ!
PyPIには登録してないので(というかするほど大層なものでもないので),pip install
はできません.
HiroshiARAKI/lifegame: Simple Conway's Game of Life Simulator on Python!!
以上,Qiita初投稿でした m(_ _)m
追記 (2019.10.28) - オブジェクトのロード,保存
早くも追記しますが,少しコードを修正し,機能を増やしました!
from lifegame import GUILifeGame
if __name__ == '__main__':
# Create Conway's Game of Life GUI Frame
game = GUILifeGame(f_shape=(50, 50), time_step=100)
# Put Galaxy on center
game.set_object('galaxy')
# Start!!
game.run()

Galaxy以外にもいくつかお試しで用意しています.また自分で**/objects**ディレクトリにテキストファイルを追加するだけで,簡単にロードできます.