Enjoy programming more!
Kidspod is a post site which supports young programmers.
First step to join us.
Register as a member
For members

ライフゲーム

2018/02/09 00:21:54

ライフゲーム

永谷 弘宣

永谷 弘宣

ライフゲームは、簡易生命シミュレーションです。
※ 時間が掛かります(1世代進むのに約40秒)

【ルール】
碁盤目状のマスが点灯または消灯しており、生存と死滅を表しています。
死んでいるマスの周囲 8 マスに生存しているマスがちょうど 3 マス存在していれば、そのマスに生命が誕生します。
生きているマスの周囲 8 マスに生存しているマスが 2 か 3 マス存在していれば、そのマスは生存し続けます。
生きているマスの周囲 8 マスに生存しているマスが 2 マス未満しか存在していなければ、そのマスは過疎により死滅します。
生きているマスの周囲 8 マスに生存しているマスが 4 マス以上存在していれば、そのマスは過密により死滅します。

これらのルールに従い、画面上のマスが描くパターンが世代を追うごとに変化して行きます。

【更新履歴】
2018/02/08 初版公開

【コード解説】
≪変数≫
A : Address, アドレスの保持
M,N : マスの状態(0,1 の 2種類)
I,J : Iterator, ループ変数
X,Y,W,Z : 上下または左右の端のループ判定
C : Count, 周囲 8 マスに生存しているマスのカウント

≪配列≫
2 つの配列で1行のマスを定義しています。
(1 行 32 文字のため、16 bit の配列を 2 つ使用)
画面は 24 行あるので、合計で 48 個の配列を使用しています。

[0] ~ [47] : パターン初期配置の定義

デフォルトでは「銀河(Galaxy)」と呼ばれる、 8 世代で元の状態に戻るパターンを定義しています。
WEBで「ライフゲーム」を検索すれば、様々なパターンを見付けることができます。
定義されている値を変更して、どのようにパターンが変化して行くかをお楽しみ下さい。

画面はトーラスになっています(上端と下端、左端と右端がループしています)。
そのため、移動物体と呼ばれるパターンを配置し、そのパターンが画面外に出たとしても、
消滅することなく画面外に出た反対側からループして出現します。

≪コード≫
5 : タイトル
10 : 初期化
20 ~ 250 : 配列初期化
260 ~ 310 : 配列の値からパターン描画
320 ~ 390 : 次の世代のパターンを計算し、配列の値を上書き
400 : パターン描画に戻る

GOOD

Programmers marked as favorites.1 programmers

Kidspod運営チーム
Kidspod運営チーム
2018/02/10 18:29:02