見出し画像

AIプログラミング日記:ライフゲームをExcelとイラレで実行したみた件

「ライフゲーム」を御存じでしょうか? 「ゲーム」とついていますが、いわゆるプレイヤーが操作して何かを成し遂げるものではなく、生物の誕生・死滅の推移を見守るだけの古典的なシミュレーションとなります。通常、ライフゲームはアプリとして作成しますが、今回は、Excel VBAとイラレ(Illustrator)のスクリプトを生成してみました。


ライフゲームは俺のライフワーク

とにかく私はライフゲームが大好きです。超シンプルなルールなのに、めくるめく文様の変化。たまらない魅力があります。

具体的に解説します。まずフィールドは縦n個×横n個のセルで敷き詰められています。セルが黒の時は生、白のときは死の状態を意味します。このセルの初期状態を用意した後に、セル全体に対して次の処理を行います。

誕生:死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生する。
生存:生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存する。
過疎:生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅する。
過密:生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅する。

wikipediaより

すると、あるセルでは生物が誕生し、あるセルでは生き残り、あるセルでは生物が死を迎え、フィールド上にはターン毎に変化するライフゲーム独特の不思議な文様が現れます。

文様の中には意味深いものもあります。その代表が「グライダー」。4つのパターンを繰り返しながら、一方向に移動するという奇妙な現象です。キャラクターを動かしているようにも見えますが、実際にはシミュレーションの結果フィールド上に浮かび上がる文様にすぎません。

そんな具合なので、なんらかのプログラミング環境があれば、そこでライフゲームを動かすのが私のライフワークとなっています。

Excelでライフゲーム

ライフゲームをAIに作らせるにあたり、まずはシンプルかつストレートに要求をプロンプトにしてみます。

👦Excel VBAで動作するライフゲームを作ってください。

Excel VBAでライフゲームを作成するための基本的なスクリプトを提供します。
このスクリプトは、Excelのセルを使ってライフゲームのグリッドを表示し、
ルールに従ってセルの状態を更新します。以下はその例です。

スクリプトの概要
グリッドの初期化。
セルの状態を更新するための関数。
ライフゲームのルールを適用する関数。
ゲームを実行するメインループ。
<コード>

コードが生成されました。実行すると、こうなりました。

ライフゲームのアルゴリズム自体は正しく構築されていますが、問題は出力です。ライフゲームのセルは四角形であるべきですが、AIはそこまで気遣ってはくれません。Excelのセルをそのまま流用したことでセルが横長表示になってしまっています。

これを是正してみます。すなわち表示に関する指示をスクリプトに対して追加します。

👦Excel VBAで動作するライフゲームを作ってください。
次はディスプレイの指定です。
#有効なセルは、縦50×横50にしてください。
#上下左右はつながっているものとしてください。
#セルが生きていれば●に、死んでいれば〇にしてください。
#各セルの横幅は1文字分のサイズで、それに合わせて高さも同じ値を設定してください。

Excel VBAで動作するライフゲームのスクリプトを作成しました。
以下のコードをExcel VBAエディタにコピーして実行してください。
これにより、50×50のセルがライフゲームとして表示され、
セルの状態が更新されます。
<コード>

コードが生成されました。実行すると次のように、セルが四角になってくれました。

実行してみたい方はファイルを公開しますのでダウンロードしてください。実行のしかたは次の通りです。

  1. [Alt]+[F11]キーで開発環境を表示する

  2. 開発環境になったら[F5]キーを押す

プログラムでは200ターンだけ実行するようになっていますが、途中で終了したければ[ESC]キーを押して[終了]ボタンを押してください。

イラレでライフゲーム

illustratorでライフゲームを実行しよう、なんて思う奇特な方がこの世にいるとは思えませんので、おそらく私が世界初! だったらいいな…

それはともかく、Illustratorでライフゲームを実行するには大きな問題があります。それは、Illustratorではリアルタイムによる画像の描き替えができないことです。その対応策としてボタンもしくはキーを押すタイミングで画像の描き替えをするターン制を導入しました。

ご愛敬で作ったものなのでプロンプトは割愛しますが、Excel同様に表示環境に沿った指示が必要となります。

実際に実行してみたい方は次をダウンロードしてください。

Illustratorでスクリプト(.jsxファイル)を実行する方法は次の通りです。

  1. 縦横1200px程度のアートボードを作ります(それ以外でも実行は可能です。アートワークからはみ出たりするだけです)

  2. ダウンロードした.jsxファイルをIllustratorに対してドラッグ&ドロップします(アクションスクリプトはこれで起動します)

  3. ダイアログ表示されている「時間経過」ボタンをマウスでクリックするか、[スペース]キーを押すと1ターンずつ進みます。なお[スペース]キーを押しっぱなしにすると、勝手にキー入力が進むので楽チンです。

なお、ライフゲームを中断したいときには、[ESC]キーを押すか、ダイアログの「閉じる」ボタンを押してください。

まとめ

今回は、ExcelとIllustratorという特殊な環境で動作するプログラムを作りましたが、PythonやJavaスクリプトであれば表示の指示はなくても、より簡単に動作するプログラムが生成されると思います。

というわけで、ライフゲームに興味が出た人はやってみて!

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?