『ライフゲーム』は、簡易生命シミュレーションです。
※ 時間が掛かります(IchigoJam BASIC 1.2.3 で 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 : パターン描画に戻る
5 'Game of Life 10 CLS:CLV 20 LET[0],#0000,#0000 30 LET[2],#0000,#0000 40 LET[4],#0000,#0000 50 LET[6],#0000,#0000 60 LET[8],#0000,#0000 70 LET[10],#0000,#0000 80 LET[12],#0000,#0000 90 LET[14],#0000,#0000 100 LET[16],#001F,#B000 110 LET[18],#001F,#B000 120 LET[20],#0000,#3000 130 LET[22],#0018,#3000 140 LET[24],#0018,#3000 150 LET[26],#0018,#3000 160 LET[28],#0018,#0000 170 LET[30],#001B,#F000 180 LET[32],#001B,#F000 190 LET[34],#0000,#0000 200 LET[36],#0000,#0000 210 LET[38],#0000,#0000 220 LET[40],#0000,#0000 230 LET[42],#0000,#0000 240 LET[44],#0000,#0000 250 LET[46],#0000,#0000 260 FOR I=0 TO 767 270 A=#900+I 280 M=PEEK(A) 290 N=[I>>4]>>(15-I&15)&1 300 IF M^N POKE A,N 310 NEXT 320 FOR I=0 TO 767 330 C=0:A=#900+I:J=I>>4:X=(I&31)=0:Y=I<32:Z=(I&31)=31:W=I>735 340 C=PEEK(A-1+32*X)+PEEK(A+1-32*Z) 350 C=C+PEEK(A-33+768*Y+32*X)+PEEK(A-32+768*Y)+PEEK(A-31+768*Y-32*Z) 360 C=C+PEEK(A+31-768*W+32*X)+PEEK(A+32-768*W)+PEEK(A+33-768*W-32*Z) 370 M=PEEK(A) 380 [J]=[J]<<1+(M=0&&C=3)+(M=1&&(C=2||C=3)) 390 NEXT 400 GOTO 260
トーラスにすると、IchigoJamの小さな画面でもライフゲームを楽しめるのですね。ナイスアイデア! 1世代40秒とは、なかなか気が長いですね。一度RUNしたらしばらく放置して楽しみます!