いわゆる「コンウェイのライフゲーム」をエディタ付きで実装してみた(Ruby)
これまで
- コンウェイのライフゲームを Ruby で実装してみた - Camera Obscura
- ライフゲームの CoffeeScript 版 - Camera Obscura
- コンソールでライフゲーム(Ruby) - Camera Obscura
などで「ライフゲーム」を実装してきましたが、フィールド・エディタが欲しくなったので作ってみました。Gtk2 を使っています。
Gem化してあるので、インストールして実行できます。Bundler かまたは $ gem install kaki-lifegame でインストールできます。実行はたんに
$ kaki-lifegame
か、Bundler を使っている人は
$ bundle exec kaki-lifegame
で GUI が立ち上がります。Gem 'gtk2' が必要です。Linux Mint 18.3, Ruby 2.3.3 で確認しました。Windows 8.1, Ruby 2.2.2p95 (2015-04-13 revision 50295) [i386-mingw32] でも確認しましたが、格子の表示がおかしくなることがあるようです*1。
使い方。
- マウスのクリックでセルを ON/OFF できます。
- マウスの左ボタンを押しながらドラッグすると連続的にセルを描くことができます。また、右ボタンを押しながらドラッグすると、連続的にセルを消すことができます。
- 開始
- 実行します。
- 停止
- 停止します。以下の機能はすべて停止中にのみ有効です。
- 1ステップ進める
- ステップ実行です。
- ばらまく
- 適当にセルを散布します。
- 格子
- 格子の表示を切り替えます。
- 緑色/橙色
- セルの色です。
- 全クリア
- すべてのセルを消します。
- 一時保存
- 一時的にフィールドを内部に保存します。
- 復帰
- 内部に保存したデータをフィールドに戻します。
- ファイルに保存
- フィールドをファイルに保存します。
- ファイルの読み込み
- ファイルに保存したフィールドのデータを読み込んで表示します。
- 終了
- 終了します。
実行動画を作ってみました。
ソースコードは以下です。
エディタ付きライフゲーム(Ruby) · GitHub
これだけでも実行できます。Gem のコードとはほんの一部だけちがいますが、本質的には同じです。
コーディングにはほぼ2日間ほどかかりました。Ruby/Gtk について調べるのに手間を食いました。Ruby ってのは書きやすくてホントすばらしい言語ですね。Ruby のオブジェクト指向プログラミングの書きやすさは快感です。
追記(4/11)
機能をさらに追加しました。
- 1ステップ戻る
- ひとつ前のフィールドに戻ります。戻れるのは過去20ステップまでです。
- ウェイト
- ウェイトする時間を変更します。値が小さいほど更新が速くなります。なお、これは停止中でなくとも有効なボタンです。
Gem もアップデートしてバージョン0.0.3 になりました。Gem の更新は $ gem update kaki-lifegame、また Bundler を使っている人は $ bundle update kaki-lifegame です。
追記(4/15)
バージョン0.0.4 でデフォルトの画面を小さくし、画面の大小ボタンを付けました。