最近、いろんな方がクリエイティブコーディングについて情報発信をしておられ、僕もちょくちょくそれらを見ながら、楽しませていただいたり、刺激をいただいたりしています。
先日は、FALさんという方が「コンウェイのライフゲーム」について紹介する記事を書かれており、ライフゲームの美しさと壮大さを再認識させてもらいました。とても分かりやすい語り口で、キレイなパターンやスゴい動画の紹介もされています。「ライフゲーム」について多少ご存じの方も、そうでない方も、ぜひ、FALさんの記事をご覧になってみてください。
・あなたの知らないライフゲームの宇宙《前編》
・あなたの知らないライフゲームの宇宙《後編》
僕がコーディングを始めるきっかけになったこちらの本でも、Processingでライフゲームを実装する方法を解説した章がありました。
■ [普及版]ジェネラティブ・アート―Processingによる実践ガイド
僕は過去に、そのp5.js移植版や、簡単なアレンジ版を作っています。よかったらついでにご覧頂ければ。
・p5.jsでコンウェイのライフゲーム
・前回のライフゲームをちょっとだけES2015で書き換えてみた
・p5.jsでいろんな2次元セル・オートマトンを見てみる
・p5.jsで6角形セルのライフゲームを作ってみた
これらは、セルの初期状態をランダムに決定し、世代による変化を眺めるだけのスケッチだったのですが、FALさんの記事(特に後編と、そこで紹介されている一連の動画)を拝見して、やはりセルによる「構造物」を鑑賞する要素があったほうが、断然、その奥深さというか、ライフゲームのカオス性に対する愛おしさのようなもの(笑)が掻き立てられるような気がします。
※ニコニコ動画にある「ライフゲームの世界」の一連の動画については、こちらの方のブログでもコメント付きで紹介されていました。
実は、上のスケッチを作った当時にも、セルの生死状態をユーザー側で任意に変えられるようにしたいなぁとは考えていました。ただ、世の中には既に多くの完成度が高いライフゲームプログラムがあるという意味であまりモチベーションが沸かず。さらに、そのころの僕はまだまだp5.js使いたてで、いろいろ手探りしながらのコード変更はわりとハードルの高い作業だったということもあり、「そのうちやろう」と保留にして、忘れていたのでした。でも今なら、以前ほど時間をかけずに何とかできそうです。
「そのうちっていつよ?」「今でしょ」
というわけで、以前作ったライフゲームにちょっとだけ書き加え、マウスを使って画面上に任意のパターンを作れるようにしてみました。
●コンウェイのライフゲーム改(クリックすると別タブが開きます)
スケッチを開くと、とりあえずランダムな初期配置で世代更新がスタートします。(FALさんが作られたライフゲームの「セルの残像効果」が印象的だったので、このスケッチでもちょっと真似してみました)
まずは適当なタイミングで「スペースキー」を押してみて下さい。セル間のグリッドが黒い線になり、中央付近に「PAUSE」と表示された状態で世代更新が一時停止します。
この状態で、任意のセルをマウスクリックすると生死状態がトグルで切り替わります。適当にいじくった後で再び「スペースキー」を押すと、更新が再開されます。
「PAUSE」状態の時に「C」キーを押すと、画面上のセルがすべて「死」状態にクリアされます。画面をクリアしてから、こんな感じで適当に距離を空けながら定番の振動子や移動物体を描いて…
スペースキーで更新を再開すると…
↑こんな感じで動きを観察できます。さながら小さな人工生命の標本箱とでもいいましょうか、何とも愛らしい(笑)。僕は「Tumbler」と「Kok’s Galaxy(銀河)」がお気に入りです。
下のスライドバーでは、更新のスピードを変えられます。スケッチそのもののフレームレートを直接いじっているので「PAUSE」状態の時には、なるべく右側のほうにツマミを置いておいたほうが(フレームレートを高くしたほうが)作業がしやすいと思います。
ライフゲームにおいて、一定の周期で同じパターンを繰り返す配置のことを振動子(オシレーター)と呼びます。上の例以外にも、世界中の研究者の手によって、さまざまな周期数やセル数の振動子が発見されていますので、いろいろ試してみて下さい。発見済みのパターンについては、以下に挙げるリンク先でも、たくさん紹介されています。
・Category: Patterns – LifeWiki
僕のスケッチは「ブラウザで小さい構造物をちょっと描いて動かしてみる」くらいの使い方しかできませんが、もっと深く、大規模にライフゲームの世界を探索してみたいという方は、専用のプログラムがネット上に多数ありますので、そちらを試していただくのがいいと思います。有名なものでは、やはり「Golly」でしょうか。
ライフゲームの面白さとスゴ味が、ひとりでも多くの方に伝わりますように。
p5.jsのライフゲームで振動子たちを愛でてみる はコメントを受け付けていません