ライフゲームでピタゴラスイッチ
どうも、108Hassiumです。
以前、こんな動画を作成しました。
この動画に対して「どうやって作ったのか」というコメントがいくつか見られ、なおかつ私も他の人が作ったものを見てみたいと思ったので、作り方を軽く解説したいと思います。
※ライフゲームそのものに対する知識はある前提で話を勧めます。
最強ソフト"Golly"
作成には、Gollyというフリーソフトを使用しました。
Gollyはライフゲーム等のセル・オートマトンを手軽にシミュレートできる超便利なソフトウェアで、ライフゲームでピタゴラスイッチをする以外でも無限に遊べます。
とりあえず、今回はピタゴラスイッチパターンの作成に必要なことだけを説明したいと思います。
※以下、Windows版を基準にして説明します。他のバージョンの使い方は知らないので自力で何とかしてください。
準備
先程のリンク先でGollyをダウンロードして解凍・実行すると、以下のような画面が表示されると思います。
画面上部の表示が異なる場合は、"View"と書いてあるところをクリックして表示されるメニューから以下のように項目を選択してください。
※"Show Scroll Bars"は無くてもいいです。
左端に表示されているのはサンプルパターンのフォルダで、様々なルールのセル・オートマトンの膨大な量のパターンが見られます。(上の画像では私が保存したファイルとフォルダも写っています)
この部分は"File"をクリックして"Show Files"を選択することで表示/非表示を切り替えられます。(私は普段非表示にしています)
さて、この状態で既にライフゲームで遊べる状態にはなっていますが、ピタゴラスイッチの建築(?)をするにはまだ不便なので設定をいじります。
"Control"の項目から"Set Algorithm"→"Super"を選択してください。
すると画面はこうなります。
""Set Algorithm"はセル・オートマトンのシミュレーションに使用するアルゴリズムを変更する項目で、"Super"というアルゴリズムを選択するとシミュレーションするルールが自動的に"LifeSuper"というものに切り替わります。(ルール名は左上の[ ]の中に書いてあります)
編集
準備はこれで完了したので、次はパターンの作成に必要な操作の説明をします。
まず、左上のEdit Barの上段のアイコンを左クリックすることで操作の切り替えができます。
私がよく使うのは以下の3つです。
Draw(ペン):グリッド上にセルを配置/削除する。配置するセルはEdit Barの下段から変更可能。
Select(点線枠):ドラッグで範囲選択。選択後の操作は後述。
Move(手):ドラッグで視点移動。パターンの作成には使わないが、動画の撮影に使用する。
ちなみに2つある虫メガネのアイコンはズームインとズームアウトなのですが、マウスホイールでもキーボードでも同じ操作ができます。
下段にはLifeSuperで使用可能な全種類のセルが並べられていますが、26種類のうち私が仕様を把握しているのは以下の6つだけです。
0番(黒):何もない空間。
1番(緑):ライフゲームの生きたセルとほぼ同じだが、死ぬと0番ではなく2番のセルに変化する。
2番(青):死んだセル。誕生条件を満たすと1番に戻る。
3番(ピンク):5番が一旦死んでから生き返った状態のセル。
4番(赤):死んだセル。誕生条件を満たすと5番ではなく3番になる。
5番(黄):生きたセル。1番とは違い、死ぬと4番になる。
キーボードでは以下の操作ができます。
"Enter":シミュレーション開始/停止
"Space":1世代ずつシミュレーションを進める
"Ctrl"+"R":シミュレーションのリセット
"Ctrl"+"Z":操作の取り消し
"Ctrl"+"C":選択した範囲のコピー
"Ctrl"+"V":コピーしたパターンの貼り付け
"M":視点のリセット
"X"/"Y":選択した範囲の左右/上下反転
">":選択した範囲の回転
"Del":選択した範囲の削除
"+":シミュレーション速度増加
"-":シミュレーション速度減少
これらを駆使することで、例えば以下のように「グライダーが方向転換するパターンを2個繋げて配置する」といった作業が非常に簡単に行えます。
パターンの保存をしたいときは、"File"をクリックして"Save Pattern"を選択することでセーブできます。
また、"File"から"New Pattern"を選択すると新しいパターンの作成が、"Open Pattern"で既存のファイルを開くことができます。
パーツ探し
人によってはGollyの使い方が分かった時点でもうピタゴラスイッチの作成を開始できると思いますが、そうでない人や単にどうやって作られたか知りたいだけの人のためにもう少しだけ解説をします。
グライダーの方向転換
ライフゲームピタゴラスイッチにおけるもっとも単純なギミックは、先程のGIF動画にあったようなグライダーの方向転換です。
アレを適当に並べるだけでも恐らくピタゴラスイッチっぽさが出ると思います。
先程の動画ではボートを使っていましたが、他にも以下のようなパターンでグライダーの方向転換ができます。
以下のコードをコピペすれば、画像のパターンをGolly上で動かせます。
x = 105, y = 89, rule = LifeSuper
24.B40.B38.B$23.AB39.AB$22.A2B38.A2B$21.B3A37.B3A$20.4B37.4B$19.4B37.
4B$18.4B37.4B$17.4B37.4B$16.4B37.4B$15.4B37.4B$14.4B37.4B$13.4B37.4B$
12.4B37.4B$11.4B37.4B$10.4B37.4B$9.4B37.4B$8.4B37.4B$7.4B37.4B$6.4B
33.A3.4B$5.4B33.A.A.4B$5.4B32.A.A2.4B$6.4B31.2A4.4B$.A5.4B37.4B$A.A5.
4B37.4B$.2A6.4B37.4B$10.4B37.4B$11.4B37.4B$12.4B37.4B$13.4B37.4B$14.
4B37.4B$15.4B37.4B$16.4B37.4B$17.4B37.4B$18.4B37.4B$19.4B37.4B$20.4B
37.4B$21.4B37.4B$22.3B38.3B$23.2B39.2B$24.B40.B11$23.AB39.B$22.A2B38.
AB$21.B3A37.A2B$20.4B37.B3A$19.4B37.4B$18.4B37.4B$17.4B37.4B$16.4B37.
4B$15.4B37.4B$14.4B37.4B$13.4B37.4B$12.4B37.4B$11.4B37.4B$10.4B36.2A
3B$A8.4B36.A2BAB$3A5.4B37.ABAB$3.A3.4B36.2ABAB$2.2A2.4B36.A2BAB$5.4B
37.ABAB$5.4B36.2BAB$6.4B36.4B$7.4B36.4B$8.4B36.4B$9.4B36.4B$10.4B36.
4B$11.4B36.4B$12.4B36.4B$13.4B36.4B$14.4B36.4B$15.4B36.4B$16.4B36.4B$
17.4B36.4B$18.4B36.4B$19.4B36.4B$20.4B36.4B$21.4B36.4B$22.3B37.3B$23.
2B38.2B$24.B39.B!
ただグライダーの軌道を変えたいだけなら1種類のパーツで十分ですが、設置場所が制限されていたりタイミング合わせが必要なギミックを作りたい場合は複数種類のパーツを用意して適切なものを選ぶ必要があります。
先程の4種類以外のパーツは以下のページに何個か載っており、このほかにもGollyのサンプル集を漁ってみると使えそうなパターンが見つかったりします。
気に入ったパーツが無い場合、自力で探すという選択肢もあります。
やり方は簡単、好きな固定物体を一つ選んでグライダーをぶつけ、いい感じの結果にならなかったら位置をずらしたり向きを変えたりしてまた衝突させて、という手順を繰り返すだけです。
キーボードショートカットをフル活用すればトライ&エラーのサイクルを爆速で回せるので、手作業でも意外と苦になりません。
なお、「いい感じの結果」というのは以下のようなパターンも含みます。
グライダーが右上からぶつかって右下へ方向転換していますが、左上にブロックが残りました。
こうなった場合、副生成物が出現する位置の近くにあらかじめ固定物体を配置しておくことで上手く副生成物を消せる場合が多いです。
導火線
続いて、グライダーの生成・衝突を挟まずに連鎖的に動きが伝播するパターンの作り方(以下、導火線)を紹介します。
導火線は高速系と低速系の2種類があり、作り方が違うので個別に説明します。
まず高速系は、導火線1本でひとつながりの巨大な固定物体になっているパターンです。
これらに関しては「作り方」というものは特になく、ライフゲームのルールに沿ってセルを並べるだけです。
使用したい導火線を選んだら、以下の順序でギミックとして組み込める形にします。
燃えてる最中(両端は除く)に燃えカスが残らないような燃焼パターンを、点火位置を微調整して探す。
点火位置と燃え終わりの周りにブロックを配置し、燃えカスを消す。
膨大な試行錯誤を要求される作業なので、人によっては全工程のうち一番楽しい作業になると思います。
続いて、低速系導火線の説明をします。
低速系導火線は、グライダー以外の中間生成物が固定物体と干渉して移動する反応を繰り返すギミックです。
例えば、以下の動画は「Πへプトミノ」というパターンがブロックと干渉して移動する様子を示しています。
移動先にも次々にブロックを配置していくことでΠへプトミノは斜め方向にジグザグに移動するようになり、更にブロックを追加することで燃えカスの処理もできます。
このような使い方のできる中間生成物は、主に以下の6種類があります。
名前は左上から順に
pi-heptomino
honey farm
LoM
R-pentomino
Herschel
wing
となっています。(lifewikiで検索しやすいように英語名で表記しました)
これらのパターンから一つ+固定物体1種類を選び、衝突実験をひたすら繰り返すことで低速系導火線に使えるパターンを見つけることができます。
タイミング調整
冒頭の動画では、オチとして最後に2個のグライダーが衝突して「ピ」の文字が完成するというギミックがありました。
これを作るにはまずグライダー2個で池ができるような衝突パターンを見つける必要があるのですが、更にそのパターン通りにグライダーの位置やタイミングを調節する必要もあります。
まず、グライダーには4通りの「状態」があります。
とりあえず左から順に0~3の番号を振っておきます。
方向転換後のグライダーの状態は方向転換に使った固定物体によって異なり、以下のように同じ状態のグライダーを同時にぶつけても最終的なグライダーの状態はバラバラになります。
また、跳ね返るグライダーの軌道も実は2種類あります。
上の2つの方向転換パターンは反射後のグライダーの状態は同じですが、反射前後のグライダーの軌道の間のセル数が偶数と奇数に分かれています。
これらの違いを考慮すると、方向転換を自由自在に操るためには少なくとも8種類の方向転換パターンを用意する必要があることになります。(実際は全種類そろえなくてもある程度は自由に遊べます)
実際のタイミング調整のやり方に関しては、私自身が説明できるほど正確に理解していないので控えさせていただきます。
最後に
作り方の解説と言いつつ「めちゃくちゃ便利なソフトがあるからそれに頼れ」「作り方とか無ぇからひたすらトライ&エラーしろ」という話になってしまいましたが、少しでも制作の参考になれば幸いです。
というわけで、皆さんもぜひライフゲームでピタゴラスイッチを作ってみてください。
ピ。