Listing of file='LIFE' on disk='vmedia/games.wvd.zip'
# Sector 633, 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 1041 DEFFN'14 : LOAD DC R"MENU"