Listing of file='LIFE' on disk='vmedia/games_vol_4.wvd.zip'
# Sector 118, program filename = 'LIFE'
0010 REM GAME OF LIFE
0020 REM CREATED BY JOHN HORTON CONWAY,1971
0030 REM A$()=ASSOCIATION MATRIX
0040 REM P$()=POPULATION MATRIX
0050 REM P=POPULATION, B=BIRTHS, D=DEATHS
0060 REM G=GENERATION, G$=GENERATION CHARACTER
0070 REM R1,R7,C1,C7=FLAGS FOR BIRTHS IN ROWS 1,17 & COL. 1,17
0080 REM
0090 DIM P$(17)17,A$(17)17,C$64,G$1,Z$1,Q$(17)17
0100 SELECT PRINT 005
0110 PRINT HEX(03);"GAME OF LIFE"
: PRINT
0120 PRINT "ENTER POINTS:"
: PRINT
: PRINT "'0=CURSOR RIGHT"
0130 PRINT "'1=CURSOR LEFT"
: PRINT "'2=CURSOR UP"
0140 PRINT "'3=CURSOR DOWN"
: PRINT "+ =ADD POINT"
0150 PRINT "- =DELETE PT."
: PRINT "CR=DONE"
0160 B$=HEX(01)
: INIT(0A)STR(B$,2)
: INIT(09)C$
0170 SELECT PRINT 405
: INIT(".")P$()
: GOSUB '15
: INIT(" ")P$()
0180 Z1,Z2=5
: G=0
: G$="0"
0190 PRINT STR(B$,1,Z1-1);STR(C$,1,10+3*Z2);
0200 KEYIN Z$,210,240
: GOTO 200
0210 IF Z$<>"+" THEN 220
: GOSUB 280
: GOTO 200
0220 IF Z$<>"-" THEN 230
: GOSUB 270
: GOTO 200
0230 IF Z$=HEX(0D) THEN 350
: GOTO 200
0240 ON VAL(Z$)+1 GOSUB 260,320,340,330
0250 GOTO 200
0260 REM (SPACE)
: Z$=" "
: PRINT HEX(09);
: GOTO 300
0270 REM (-)
: Z$=" "
: PRINT ".";
: GOTO 290
0280 REM (+)
: Z$="0"
: PRINT "*";
: P=P+1
0290 Z0$=STR(P$(Z1),Z2,1)
: STR(P$(Z1),Z2,1)=Z$
: IF Z0$=" " THEN 300
: P=P-1
0300 IF Z2>15 THEN 310
: PRINT HEX(0909);
: Z2=Z2+1
: RETURN
0310 PRINT HEX(08);
: RETURN
0320 REM (BACK)
: IF Z2<3 THEN 250
: PRINT HEX(080808);
: Z2=Z2-1
: RETURN
0330 REM (DOWN)
: IF Z1>15 THEN 250
: PRINT HEX(0A);
: Z1=Z1+1
: RETURN
0340 REM (UP)
: IF Z1<3 THEN 250
: PRINT HEX(0C);
: Z1=Z1-1
: RETURN
0350 SELECT PRINT 005(64)
: FOR I=1 TO 17
: Q$(I)=P$(I)
: NEXT I
0360 SELECT CI 001
: PRINT HEX(03)
: GOSUB '15
: GOTO 770
0370 REM CALCULATE ASSOCIATION MATRIX
0380 INIT(30)A$()
: FOR I=2 TO 16
: K=2
0390 J=POS(STR(P$(I),K)<>" ")
: IF J=0 THEN 420
: K=K+J
0400 ADD(STR(A$(I-1),K-2,3),01)
: ADD(STR(A$(I),K-2,3),01)
0410 ADD(STR(A$(I+1),K-2,3),01)
: GOTO 390
0420 NEXT I
0430 REM ADD BIRTHS, DELETE DEATHS, CHECK FOR BIRTHS IN COL.1,17
0440 C1,C7,B,D=0
: FOR I=1 TO 17
: K=1
0450 IF K>17 THEN 480
: J=POS(STR(A$(I),K)>"4")
: IF J=0 THEN 480
0460 K=K+J
: IF STR(P$(I),K-1,1)=" " THEN 450
0470 STR(P$(I),K-1,1)=" "
: D=D+1
: GOTO 450
0480 K=1
0490 IF K>17 THEN 520
: J=POS(STR(A$(I),K)="1")
: IF J=0 THEN 520
0500 K=K+J
: IF STR(P$(I),K-1,1)=" " THEN 490
0510 STR(P$(I),K-1,1)=" "
: D=D+1
: GOTO 490
0520 K=1
0530 IF K>17 THEN 560
: J=POS(STR(A$(I),K)="2")
: IF J=0 THEN 560
0540 K=K+J
: IF STR(P$(I),K-1,1)=" " THEN 530
0550 STR(P$(I),K-1,1)=" "
: D=D+1
: GOTO 530
0560 K=1
0570 J=POS(STR(A$(I),K)="3")
: IF J=0 THEN 610
0580 IF J+K>2 THEN 590
: C1=1
0590 K=K+J
: IF STR(P$(I),K-1,1)<>" " THEN 570
0600 STR(P$(I),K-1,1)=G$
: B=B+1
: IF K<18 THEN 570
: C7=1
0610 NEXT I
0620 REM CHECK FOR BIRTHS IN ROW 1,17
0630 R1=POS(P$(1)<>" ")
: R7=POS(P$(17)<>" ")
0640 REM AUTO-SHIFT
0650 PRINT STR(B$,1,8);
: IF R1+R7=0 THEN 700
0660 IF R1=0 THEN 680
: IF R7=0 THEN 690
0670 PRINT STR(B$,1,8);"OFF SCREEN "
: GOTO 1040
0680 GOSUB '02
: GOTO 700
0690 GOSUB '03
0700 IF C1+C7=0 THEN 740
: IF C1=0 THEN 720
: IF C7=0 THEN 730
0710 GOTO 670
0720 GOSUB '01
: GOTO 740
0730 GOSUB '00
0740 GOSUB '15
: G=G+1
: P=P+B-D
: PRINT STR(B$,1,8);TAB(15)
0750 PRINT TAB(15)
0760 IF B+D<>0 THEN 770
: PRINT STR(B$,1,8);"STABLE"
: GOTO 1040
0770 PRINT HEX(01);
0780 PRINT "...CENSUS..."
: PRINT
: PRINT "GENERATION";G
0790 PRINT "POPULATION";P
: PRINT "BIRTHS";B
: PRINT "DEATHS";D
0800 ADD(G$,01)
: IF G$<>HEX(3A) THEN 810
: G$="A"
: GOTO 820
0810 IF G$<="Z" THEN 820
: G$="0"
0820 KEYIN Z$,830,830
: GOTO 860
0830 PRINT
: PRINT "STOPPED";HEX(0C)
0840 KEYIN Z$,850,850
: GOTO 840
0850 PRINT TAB(15)
0860 IF P<>0 THEN 370
: PRINT
: PRINT "EXTINCT"
: GOTO 1040
0870 DEFFN'00
: PRINT "SHIFTING RIGHT"
0880 FOR I=1 TO 17
: P$=P$(I)
: P$(I)=" "
0890 IF STR(P$,16)<>" " THEN 670
: STR(P$(I),2)=P$
: NEXT I
: RETURN
0900 DEFFN'01
: PRINT "SHIFTING LEFT"
0910 FOR I=1 TO 17
: P$(I)=STR(P$(I),2)
0920 IF STR(P$(I),1,1)<>" " THEN 670
: NEXT I
: RETURN
0930 DEFFN'02
: PRINT "SHIFTING UP"
0940 IF P$(2)<>" " THEN 670
0950 FOR I=1 TO 16
: P$(I)=P$(I+1)
: NEXT I
: P$(17)=" "
: RETURN
0960 DEFFN'03
: PRINT "SHIFTING DOWN"
0970 IF P$(16)<>" " THEN 670
0980 FOR I=17 TO 2 STEP -1
: P$(I)=P$(I-1)
: NEXT I
: P$(1)=" "
: RETURN
0990 REM PRINT MATRIX
1000 DEFFN'15
: PRINT HEX(01);
1010 FOR I=2 TO 16
: PRINT STR(C$,1,16);
1020 FOR J=2 TO 16
: PRINT STR(P$(I),J,1);" ";
: NEXT J
1030 PRINT
: NEXT I
: RETURN
1040 REM