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

MixJuice GET URL : kidspod.club/mj/460

ライフゲーム

ライフゲームは、簡易生命シミュレーションです。
※ 時間が掛かります(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 : パターン描画に戻る

  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

SOURCE CODE

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

COMMENT

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

トーラスにすると、IchigoJamの小さな画面でもライフゲームを楽しめるのですね。ナイスアイデア! 1世代40秒とは、なかなか気が長いですね。一度RUNしたらしばらく放置して楽しみます!