ライフゲーム

nicoBasicで動くライフゲームです。

1 dim x1(8)
2 dim y1(8)
3 x1(0)=0:x1(1)= 1:x1(2)= 1:x1(3)= 1
4 x1(4)=0:x1(5)=-1:x1(6)=-1:x1(7)=-1
5 y1(0)=-1:y1(1)=-1:y1(2)=0:y1(3)= 1
6 y1(4)= 1:y1(5)= 1:y1(6)=0:y1(7)=-1
7 CLS
8 FOR I=0 TO 100
9 X= RND % 32
10 Y= RND % 16
11 PSET X,Y,1
12 NEXT
20 FOR Y=0 TO 15
21 FOR X=0 TO 31
22 D=0
23 FOR I=0 TO 7
24 IF POINT(X+x1(i),Y+y1(i)) THEN D=D+1
25 NEXT
26 C=0
33 IF D=2 THEN C=point(x,y)
35 IF D=3 THEN C=1
40 PSET X+40,Y,C
70 NEXT
80 NEXT
82 SCROLL 40,0
90 GOTO 20

▲プログラムです。
・隣接しているセルの数が2個だと現状維持、
・隣接しているセルの数が3個ならセルが誕生、
・それ以外の個数ならセルが死滅
としてみました。
うろ覚えなので、間違ってるかも。

セルの個数は配列と新しく作ったpoint関数を使って数えています。
配列には8つの方向の相対的な座標が入ってます。
point関数は指定した座標のvramを読み取るための関数です。


▲液晶画面で動いてる様子です。
動作速度がものすごい遅いです。32x16セルの画面を1つ更新するのに14秒くらいかかります。


▲秋月製電光掲示板モジュールで動いてる様子です。


▲前回の20080805版は「DIM」に対応させた副作用でバグが連発していましたので、今回の20080808版で対策しました。point関数を新しく追加してます。
あと、20080808版では実験的にフォントサイズを3x5に縮めてみました。これで5行表示ができます。読みにくいけど。