ライフゲーム torus surface 版

ドーナツの形をした面上で、ライフゲームを展開します。

《Hint》平面から円筒を作り、その円筒からトーラスを作ります。3D で表示するときには、テクスチャーマッピングを利用するのがよいでしょう。

《Note》torus surface 版は、Swing/Jython 篇を参照してください。
《関連記事》Oh 脳《002》ドーナツクイズ - 続・ひよ子のきもち

【余録】エピソード

となりのトトロ」が公開されてから、あのときと同じ感動に浸れる「崖の上のポニョ」まで、実に20年も待たされました。その年(1988年)の瀬に、Wink の「愛が止まらない」が流れる中、このライフゲーム amorphous の作成と並行して、今井美樹さんの「静かにきたソリチュード」のギターアレンジに没頭していた、あのときの記憶が鮮明に蘇ります。


1/15

学習の指針

この課題では、ゲームを作成するのは「目的」ではなく、実際のアプリケーション開発を疑似体験するための「手段」です。そのため、ゲーム作成のノウハウを提供することはなく、ここで作成するゲームは副産物にすぎません。ゲームの「ルール」は、実際のアプリケーション開発における「要求仕様」に相当します。要求仕様(ルール)の変更に伴って、既存のリソースをどこまで再利用できるかが鍵となります。設計に際しては「プログラム」の効率を犠牲にしても「プログラミング」の効率を優先させることに主眼を置いています。
要求仕様(ルール)の変更に伴って、既存のリソースに与える影響が少なくなるように工夫してください。開放閉鎖原則〔OCL: Open-Closed Principle〕に沿って、機能の拡張するときには、新たなモジュールを追加する(Open)だけで、既存のモジュールはその影響を受けない(Closed)のを理想とします。

《付記》Hint に捕われず、自由に取り組んでみてください。

きっかけは

最初にライフゲーム(amorphous)を作成したのが1988年ですから、今年でちょうど20年目になります。ここでは、WPF アプリケーションとして作成した事例を紹介します。
オセロゲーム(trinity)を完成させた余韻に浸りながら、年末年始の休みを利用して、ライフゲーム(amorphous)作りに着手したものです。そのルールは(単細胞/多細胞生命体が混在することを除いて)オリジナルの「ライフゲーム」と同様です。

version implementation note
第1版 1988/12/30 Smalltalk/Smalltalk オセロゲーム(trinity)と同時並行で作成しました。当時のバージョンはカラー対応しておらず、グレースケール(ビットマップ)を利用していたのが懐かしく思えます。
第2版 2004/03/02 Swing/Jython ビューには、Swing コンポーネントを利用しました。Smalltalk/Python の違いが、ここに集約されます。torus surface 版は完成しましたが、amorphous 版は未完成のまま、今日に至っています。
第3版 2008/06/13 WPF/IronPython モデルは上記のものを再利用して、ビューを新たに作成します。Swing/WPF の違い、Jython/IronPython の違いが、ここに集約されます。Swing/Jython では、amorphous 版は未完成でしたが、今回は完成まで漕ぎ着けました。

ライフゲーム amorphous 版

規則正しい配列を持たない形状で、ライフゲームを展開します。



規則正しい構造を持たない、無定形の非結晶構造を連想させる盤面を用意します。不定形のセルを取り囲む(境界を接する)他のセルの数によって、次世代の生命体の生死を決定(オリジナルのルールに従います)します。伝統的なライフゲームを単細胞生命体と見なすと、ライフゲーム amorphous は、単細胞生命体/多細胞生命体が共存する世界と見なせます。

《Hint》Composite パターンを適用してみてはいかがでしょうか。単細胞生命体と多細胞生命体とを、一様に扱えるようにするのがコツです。