c64-basic/life-lab/life-lab.bas

28 lines
1.1 KiB
QBasic

10 PRINT CHR$(147):POKE 53280,0:POKE 53281,0
20 PRINT " LIFE LAB":PRINT
30 PRINT "WATCH CELLS LIVE, DIVIDE, AND DIE."
40 PRINT "SPACE=PAUSE R=RESEED Q=QUIT":PRINT
50 PRINT "PRESS ANY KEY"
60 GET K$:IF K$="" THEN 60
70 R=RND(-TI):DIM A(39,19),B(39,19)
80 FOR Y=0 TO 19:FOR X=0 TO 39:A(X,Y)=-(RND(1)>.72):NEXT X,Y
90 G=0
100 PRINT CHR$(147):FOR Y=0 TO 19:FOR X=0 TO 39:P=1064+Y*40+X:POKE P,32
110 IF A(X,Y) THEN POKE P,81:POKE 55336+Y*40+X,13
130 NEXT X,Y:PRINT CHR$(19);"GENERATION";G;" SPACE PAUSES"
140 GET K$:IF K$="Q" THEN 280
150 IF K$="R" THEN 80
160 IF K$=" " THEN GOSUB 250
170 FOR Y=0 TO 19:FOR X=0 TO 39:N=0
180 FOR DY=-1 TO 1:FOR DX=-1 TO 1
190 IF DX=0 AND DY=0 THEN 210
200 XX=X+DX:YY=Y+DY:IF XX>=0 AND XX<=39 AND YY>=0 AND YY<=19 THEN N=N+A(XX,YY)
210 NEXT DX,DY:B(X,Y)=0
220 IF N=3 OR A(X,Y) AND N=2 THEN B(X,Y)=1
230 NEXT X,Y:FOR Y=0 TO 19:FOR X=0 TO 39:A(X,Y)=B(X,Y):NEXT X,Y
240 G=G+1:GOTO 100
250 PRINT:PRINT "PAUSED - SPACE CONTINUES, Q QUITS"
260 GET K$:IF K$="Q" THEN 280
270 IF K$<>" " THEN 260
275 RETURN
280 POKE 53280,14:POKE 53281,6:PRINT CHR$(147):END