28 lines
1.1 KiB
QBasic
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
|