TOP 自分の思い 邪馬台国 バイク 瓢箪 霊場巡り 囲碁と将棋 CAD/CAM 生産管理 海外の思い出 索引
ライフゲーム ソースプログラム

最近のBASICは行番号がいらないらしい
でもgoto文とgosub文は番号に飛ぶ方がBASICらしい
と思うので無理やりN88BASICモードで記述した
結果、冒頭に変数のタイプを定義したり、文字配列に$が無かったり
それでいて、LOCATE命令があったり、ラベルとしての行番号があったり
和洋折衷ならぬ古今折衷みたいなプログラムになってしまった
表示はDOTを4個単位にして見やすくした
流石に1DOTでは細かすぎて目に悪い
画面の解像度設定にもよるが、15インチモニターで1200X800
ドットの「窓」が映るハードで作成した
ノートパソコン等小型モニターの場合はプログラムを修正してほしい
プログラム経験のある方なら簡単と思う
私のパソコンではマイクロソフト社のBASICは動かないので
アクティブベイシックというフリーソフトで動かした
なかなか早くてライフゲームには具合が良い
昔と違い、メモリーの使用制限がないのも良い
文法は変数定義が面倒だったが判りやすい、エラーメッセージ、デバッグ
機能、コンパイル機能と至れり尽くせりで非常に良い
使わせていただいたお断りと合わせて、敬意を表して、お礼を申し上げ
ます
追記)2017/6/1
遂に私もスマホに移行することになった
今まで使っていた携帯が古くなり止むを得ずである
早速このゲームをアンドロイドで動かしてみようとしたら全く動作しない
ウィンドウズ8.1では動いたので他のOSではだめらしい
このソースをコピーし、アンドロイドで動くBASICに移行してもらう
しかない、残念ながら私には当分出来そうもない

#N88BASIC
Cls 3
Print "LIFE GAME"
Dim A(600,400) as Integer
Dim B(60) as String
Dim X     as Integer
Dim Y     as Integer
Dim H     as Integer
Dim W     as Integer
Dim T     as Integer
Dim XMIN  as Integer
Dim YMIN  as Integer
Dim XMAX  as Integer
Dim YMAX  as Integer
Dim RIGHT as Integer
Dim LEFT  as Integer
Dim TOP   as Integer
Dim BOTTOM as Integer
Dim NBRS  as Integer
Dim D     as Integer
Dim PATNO as Integer
H=1
For X=1 to 60:B(X)="" :Next X
print "最初に画面最大化にして下さい"
Print "パターンを”.”か”o”で入れて下さい例...oo.o."
Print "終了は”e”、ランダムは”r”の後10以下の適当な数字を入れる"
Print "面白いパターンは見るのは”p”を入れてください"
70
 Input B(H)
IF B(H)="r" then goto 900
if B(H)="e" then H=H-1:goto 120
If B(H)="p" Then Goto 1000
if LEN(B(H))>W then W=LEN(B(H))
H=H+1
goto 70
120
 XMIN=Int(300-W/2):YMIN=Int(200-H/2):XMAX=XMIN+W:YMAX=YMIN+H
for Y=1 to H :for X=1 TO W
if Mid$(B(Y),X,1)="." then goto 160
A(X+XMIN,Y+YMIN)=1
160
next X:next Y
Cls 3
RIGHT=1:LEFT=600:TOP=400:BOTTOM=1
180
 for Y=YMIN to YMAX
for X=XMIN to XMAX
if A(X,Y)=11 then A(X,Y)=1 :if A(X,Y)=10 then A(X,Y)=0
If A(X,Y)=1 Then Gosub 800 Else Gosub 860
next X:Next Y
Locate 0,0
print"TIME",T
XMIN=LEFT:YMIN=TOP:XMAX=RIGHT:YMAX=BOTTOM
If XMIN<3 Then XMIN=3
If YMIN<3 Then YMIN=3
If XMAX>598 Then XMAX=598
If YMAX>398 Then YMAX=398
T=T+1:XMIN=XMIN-1:YMIN=YMIN-1:XMAX=XMAX+1:YMAX=YMAX+1
for Y=YMIN to YMAX: for X=XMIN to XMAX
NBRS=A(X-1,Y-1)+A(X,Y-1)+A(X+1,Y-1)+A(X-1,Y)
NBRS=Int(NBRS/10)
NBRS=NBRS+A(X+1,Y)+A(X-1,Y+1)+A(X,Y+1)+A(X+1,Y+1)
NBRS=NBRS-10*Int(NBRS/10)
A(X,Y)=A(X,Y)-10*Int(A(X,Y)/10)
A(X,Y)=10*A(X,Y)
if NBRS=3 then goto 450
if NBRS<>2 then goto 460
if A(X,Y)<>10 then goto 460
450 A(X,Y)=A(X,Y)+1
460 next X: next Y
goto 180
end
800 '4BIT ON
Pset (X*2,Y*2),6
Pset (X*2+1,Y*2+1),6
Pset (X*2,Y*2+1),6
Pset (X*2+1,Y*2),6
If X> RIGHT Then RIGHT=X
If X< LEFT Then LEFT=X
If Y< TOP Then TOP=Y
If Y> BOTTOM Then BOTTOM=Y
Return
860 '4BIT OFF
Pset (X*2,Y*2),0
Pset (X*2+1,Y*2+1),0
Pset (X*2,Y*2+1),0
Pset (X*2+1,Y*2),0
Return
900 Randomize
Input "密度 1 to 10:",D
for Y=2 to 399: for X=2 to 599
if Rnd()*50<D then A(X,Y)=1 Else A(X,Y)=0
next X:next Y: Cls 3
XMIN=3: YMIN=3: XMAX=598: YMAX=398
goto 180

1000
Print " 用意したパターンは22種類です"
Print "@ブリンカー     周期的に同じ形が現れる、瞬いているように見えるのでブリンカーと呼ばれる"
Print "A交通信号      Tテトロミノと呼ばれる、10回目にブリンカー4つになる"
Print "Bグライダー     形を変えながら斜めに移動する"
Print "CRペントミノ     単純な形だが、徐々に大きくなっていく、途中で固定物体等を作り出す"
Print "Dパルサー1     何回かの周期で基の形に戻る、ブリンカーの大型版"
Print "Eヘプトミノ     小さな物体が大きく成長"
Print "FTテトロミノ機関車  横に移動していく"
Print "G肥料の山とパン屋の激突 最後は固定物体になるがそれまでが面白い"
Print "Hパルセイター    8回の周期でもどるパルサー"
Print "Iペンタデカスロン  これもパルセイターの一種"
Print "J理髪店の看板    周期2でまたたく"
Print "K銀河        回転する"
Print "L時計        これも文字盤が回転する"
Print "M船の往復      2つの物体の間を船が往復する"
Print "N宇宙船の衝突    宇宙船がぶつかる、一対は消滅するが、一対は角度を変えて遠のく"
Print "Oシャトル往復    2つの固定物体の間を往復する"
Print "Pどんぐり      たった7ピクセルだが、膨大に成長"
Print "Qグライダー銃    大型パターン、次々とグライダーを発射する"
Print "Rシュシュポッポ列車 煙を残しながら移動していく"
Print "S宇宙艦体      大船団が移動していく"
Print "21大宇宙艦体     超大船団が移動していく、「バックミュージックは大和か?」"
Print "22ノアの箱舟     多様な物体を生成しながら進んでゆく"
Input "Please Input Patern No",PATNO
If PATNO=1 Then Gosub 1100
If PATNO=2 Then Gosub 1200
If PATNO=3 Then Gosub 1300
If PATNO=4 Then Gosub 1400
If PATNO=5 Then Gosub 1500
If PATNO=6 Then Gosub 1600
If PATNO=7 Then Gosub 1700
If PATNO=8 Then Gosub 1800
If PATNO=9 Then Gosub 1900
If PATNO=10 Then Gosub 2000
If PATNO=11 Then Gosub 2100
If PATNO=12 Then Gosub 2200
If PATNO=13 Then Gosub 2300
If PATNO=14 Then Gosub 2400
If PATNO=15 Then Gosub 2500
If PATNO=16 Then Gosub 2600
If PATNO=17 Then Gosub 2700
If PATNO=18 Then Gosub 2800
If PATNO=19 Then Gosub 2900
If PATNO=20 Then Gosub 3000
If PATNO=21 Then Gosub 3100
If PATNO=22 Then Gosub 3200
Goto 120
1100 'ブリンカー
B(1)="ooo.......oooo"
B(2)=".............."
B(3)=".............."
B(4)=".............."
B(5)=".............."
B(6)=".............."
B(7)=".............."
B(8)="oo........ooo."
B(9)="ooo.......ooo."
B(10)="ooo.......ooo."
W=14:H=10:Return
1200 '交通信号
B(1)="..ooo."
B(2)="...o.."
W=6:H=2:Return
1300 'グライダー
B(1)=".o.............."
B(2)="..o............."
B(3)="ooo............."
W=16:H=3:Return
1400 'Rペントミノ
B(1)=".oo............."
B(2)="oo.............."
B(3)=".o.............."
B(4)="................"
B(5)="................"
B(6)="................"
B(7)="................"
B(8)="................"
B(9)="................"
B(10)="................"
B(11)="................"
W=16:H=11:Return
1500 'パルサー1
B(1)="..ooo...ooo....."
B(2)="................"
B(3)="o....o.o....o..."
B(4)="o....o.o....o..."
B(5)="o....o.o....o..."
B(6)="..ooo...ooo....."
B(7)="................"
B(8)="..ooo...ooo....."
B(9)="o....o.o....o..."
B(10)="o....o.o....o..."
B(11)="o....o.o....o..."
B(12)="................"
B(13)="..ooo...ooo....."
W=16:H=13:Return
1600 'ヘプトミノ
B(1)="ooo"
B(2)="o.o"
B(3)="o.o"
W=3:H=3:Return
1700 'Tテトロミノ機関車
B(1)=".....oooo"
B(2)="....o...o"
B(3)="........o"
B(4)="oo..o..o."
B(5)="ooo......"
B(6)="oo..o..o."
B(7)="........o"
B(8)="....o...o"
B(9)=".....oooo"
W=9:H=9:Return
1800 '肥料の山とパン屋の激突
B(1)="..oo..........o.."
B(2)=".oo............o."
B(3)="oo...........o..o"
B(4)="............ooo.."
B(5)=".............o..."
W=17:H=5:Return
1900  '8
B(1)="ooo...."
B(2)="ooo...."
B(3)="ooo...."
B(4)="...ooo."
B(5)="...ooo."
B(6)="...ooo."
W=7:H=6:Return
2000 'ペンタデカソロン
B(1)="..o....o.."
B(2)="oo.oooo.oo"
B(3)="..o....o.."
W=10:H=3:Return
2100 '理髪店の看板
B(1)=".........oo"
B(2)="..........o"
B(3)=".......o.o."
B(4)="..........."
B(5)=".....o.o..."
B(6)="..........."
B(7)="...o.o....."
B(8)="..........."
B(9)=".o.o......."
B(10)="o.........."
B(11)="oo........."
W=11:H=11:Return
2200 '銀河
B(1)="oooooo.oo"
B(2)="oooooo.oo"
B(3)=".......oo"
B(4)="oo.....oo"
B(5)="oo.....oo"
B(6)="oo.....oo"
B(7)="oo......."
B(8)="oo.oooooo"
B(9)="oo.oooooo"
W=9:H=9:Return
2300 '時計
B(1)="....oo......"
B(2)="....oo......"
B(3)="............"
B(4)="....oooo...."
B(5)="...o....o.oo"
B(6)="...o..o.o.oo"
B(7)="oo.o..o.o..."
B(8)="oo.o.o..o..."
B(9)="....oooo...."
B(10)="............"
B(11)="......oo...."
B(12)="......oo...."
W=12:H=12:Return
2400 'ペンタデカソロン2
B(1)="...........................o..o....o..o.."
B(2)=".........................ooo..oooooo..ooo"
B(3)="...........................o..o....o..o.."
B(4)="........................................."
B(5)="..o..o....o..o..........................."
B(6)="ooo..oooooo..ooo..o......................"
B(7)="..o..o....o..o...o......................."
B(8)=".................ooo....................."
W=41:H=8:Return
2500 '宇宙船の衝突
B(1)="...o...o...."
B(2)="....o.o....."
B(3)="o...o.o...o."
B(4)=".oooo.oooo.."
B(5)="............"
B(6)="............"
B(7)="............"
B(8)="............"
B(9)="............"
B(10)="...o....o..."
B(11)="....o..o...."
B(12)="o...o..o...o"
B(13)=".oooo..oooo."
W=12:H=13:Return
2600 'シャトル往復
B(1)=".........o............"
B(2)=".........oo..........."
B(3)="....oo....oo.........."
B(4)="oo..oo....ooo.......oo"
B(5)="oo..oo....oo........oo"
B(6)=".........oo..........."
B(7)=".........o............"
W=22:H=7:Return
2700 'どんぐり
B(1)=".o....."
B(2)="...o..."
B(3)="oo..ooo"
W=7:H=3:Return
2800 'グライダー銃
B(1)=".........................o.........."
B(2)="......................oooo.........."
B(3)=".............o.......oooo.........oo"
B(4)="............o.o......o..o.........oo"
B(5)="oo.........o...oo....oooo.....o....."
B(6)="oo.........o...oo.....oooo....o....."
B(7)="...........o...oo........o.........."
B(8)="............o.o....................."
B(9)=".............o......................"
B(10)="......................o.o..........."
B(11)=".......................oo..........."
B(12)=".......................o............"
W=36:H=12:Return
2900 'シュポッポ列車
B(1)="...o."
B(2)="....o"
B(3)="o...o"
B(4)=".oooo"
B(5)="....."
B(6)="....."
B(7)="....."
B(8)="o...."
B(9)=".oo.."
B(10)="..o.."
B(11)="..o.."
B(12)=".o..."
B(13)="....."
B(14)="....."
B(15)="...o."
B(16)="....o"
B(17)="o...o"
B(18)=".oooo"
W=5:H=18:Return
3000 '宇宙艦隊
B(1)=".....oooo...."
B(2)="....oooooo..."
B(3)="....oooo.oo.."
B(4)="........oo..."
B(5)="............."
B(6)="..oo........."
B(7)="o..........o."
B(8)="............o"
B(9)="o...........o"
B(10)=".oooooooooooo"
B(11)="............."
B(12)="............."
B(13)=".....oooo...."
B(14)="....oooooo..."
B(15)="....oooo.oo.."
B(16)="........oo..."
W=13:H=16:Return
3100 '宇宙大艦隊
B(1)="................o..o........."
B(2)="....................o........"
B(3)="................o...o........"
B(4)=".................oooo........"
B(5)="............................."
B(6)="............................."
B(7)="............................."
B(8)=".............oooooooooo......"
B(9)="............o.........o......"
B(10)="......................o......"
B(11)="............o........o......."
B(12)="..........oo................."
B(13)="........o..............o....."
B(14)="........................o...."
B(15)="........o...............o...."
B(16)=".........oooooooooooooooo...."
B(17)="............................."
B(18)="............................."
B(19)="............................."
B(20)=".....oooooooooooooooooooooo.."
B(21)="....o.....................o.."
B(22)="..........................o.."
B(23)="....o....................o..."
B(24)="..oo........................."
B(25)="o..........................o."
B(26)="............................o"
B(27)="o...........................o"
B(28)=".oooooooooooooooooooooooooooo"
B(29)="............................."
B(30)="............................."
B(31)="............................."
B(32)=".....oooooooooooooooooooooo.."
B(33)="....o.....................o.."
B(34)="..........................o.."
B(35)="....o....................o..."
B(36)="......oo....................."
B(37)="........o..............o....."
B(38)="........................o...."
B(39)="........o...............o...."
B(40)=".........oooooooooooooooo...."
B(41)="............................."
B(42)="............................."
B(43)="............................."
B(44)=".............oooooooooo......"
B(45)="............o.........o......"
B(46)="......................o......"
B(47)="............o........o......."
B(48)="..............oo............."
B(49)="................o..o.........."
B(50)="....................o........."
B(51)="................o...o........."
B(52)=".................oooo........."
W=29:H=52:Return
3200 'シュポッポ列車2
B(1)="..........o.o.."
B(2)=".........o....."
B(3)="..........o..o."
B(4)="............ooo"
B(5)="..............."
B(6)="..............."
B(7)="..............."
B(8)="..............."
B(9)="..............."
B(10)=".o............."
B(11)="o.o............"
B(12)="..............."
B(13)="o..o..........."
B(14)="..oo..........."
B(15)="...o..........."
W=15:H=15:Return