!***********************************! ! ! ! LIFE.BAS ! ! Conway's Game of Life ! ! Implemented under AlphaBASIC ! ! By Trygve Lode ! ! ! !***********************************! MAP1 A(20),S,40 MAP1 XXX,X,5000 MAP1 XXX1,X,5000 MAP1 ADJ(20,40),F,6,@XXX MAP1 ADJ1(20,40),F,6,@XXX1 MAP1 ADJI(40,8),F,6 MAP1 ADJJ(20,8),F,6 MAP1 RC(20),F,6 MAP1 RC1(20),F,6 INIT: ? TAB(-1,0);"Initializing....Please wait."; FOR I = 1 TO 40 ADJI(I,1)=I-1 ADJI(I,2)=I ADJI(I,3)=I+1 ADJI(I,4)=I+1 ADJI(I,5)=I+1 ADJI(I,6)=I ADJI(I,7)=I-1 ADJI(I,8)=I-1 NEXT I ADJI(1,1)=40 ADJI(40,3)=1 ADJI(40,4)=1 ADJI(40,5)=1 ADJI(1,7)=40 ADJI(1,8)=40 FOR J = 1 TO 20 ADJJ(J,1)=J-1 ADJJ(J,2)=J-1 ADJJ(J,3)=J-1 ADJJ(J,4)=J ADJJ(J,5)=J+1 ADJJ(J,6)=J+1 ADJJ(J,7)=J+1 ADJJ(J,8)=J RC(J)=1 NEXT J ADJJ(1,1)=20 ADJJ(1,2)=20 ADJJ(1,3)=20 ADJJ(20,5)=1 ADJJ(20,6)=1 ADJJ(20,7)=1 FOR J = 1 TO 20 A(J)=" " NEXT J FOR I = 1 TO 40 FOR J = 1 TO 20 ADJ(J,I)=0 NEXT J NEXT I GEN = 0 POP = 0 BIRTHS = 0 DEATHS = 0 PRINT TAB(-1,0); FIRSTCOL = 1 LASTCOL = 40 FIRSTROW = 1 LASTROW = 20 SCREEN: PRINT TAB(-1,11); FOR I = 1 TO 20 PRINT TAB(I+1,1); "|"; PRINT TAB(1,I+1); "-"; PRINT TAB(1,I+21); "-"; PRINT TAB(I+1,42); "|"; PRINT TAB(22,I+1); "-"; PRINT TAB(22,I+21); "-"; NEXT I PRINT TAB(1,1); "+"; TAB(1,42); "+"; PRINT TAB(22,1); "+"; TAB(22,42); "+"; PRINT TAB(-1,12); PRINT TAB(3,52); "== LIFE =="; ENTRY: PRINT TAB(5,50); "Enter pattern"; PRINT TAB(7,50); "Use VUE control chars"; PRINT TAB(9,50); "Use SPACEs and STARs"; XCALL VUE, A(1), 20, 40, 1, 1 FOR I = 1 TO 40 FOR J = 1 TO 20 IF A(J)[I,I]=" " THEN GOTO Z1 POP = POP + 1 ADJ(ADJJ(J,1),ADJI(I,1)) = ADJ(ADJJ(J,1),ADJI(I,1))+1 ADJ(ADJJ(J,2),ADJI(I,2)) = ADJ(ADJJ(J,2),ADJI(I,2))+1 ADJ(ADJJ(J,3),ADJI(I,3)) = ADJ(ADJJ(J,3),ADJI(I,3))+1 ADJ(ADJJ(J,4),ADJI(I,4)) = ADJ(ADJJ(J,4),ADJI(I,4))+1 ADJ(ADJJ(J,5),ADJI(I,5)) = ADJ(ADJJ(J,5),ADJI(I,5))+1 ADJ(ADJJ(J,6),ADJI(I,6)) = ADJ(ADJJ(J,6),ADJI(I,6))+1 ADJ(ADJJ(J,7),ADJI(I,7)) = ADJ(ADJJ(J,7),ADJI(I,7))+1 ADJ(ADJJ(J,8),ADJI(I,8)) = ADJ(ADJJ(J,8),ADJI(I,8))+1 Z1: NEXT J NEXT I ?TAB(-1,29); BIRTHS = POP XXX1=XXX ?TAB(5,50);"Generation ";TAB(7,50);"Population "; ?TAB(9,50);" "; ?TAB(15,50);"Births";TAB(17,50);"Deaths"; DISPLAY: FOR J = 1 TO 20:?TAB(J+1,2);A(J);:NEXT J ?TAB(5,63);GEN;TAB(7,63);POP;" "; ?TAB(15,59);BIRTHS;" ";TAB(17,59);DEATHS;" "; IF POP=0 THEN ?TAB(9,54);"ALL DEAD";TAB(-1,28):END IF BIRTHS+DEATHS=0 THEN ?TAB(9,54);"STABILIZED";TAB(-1,28);: END NEWGEN: GEN=GEN+1 DEATHS=0 BIRTHS=0 FOR J=1 TO 20 : RC1(J) = RC(J) : RC(J)=0 : NEXT J FOR J = 1 TO 20 IF RC1(J)=0 THEN GOTO Z4 FOR I = 1 TO 40 IF A(J)[I,I] = " " THEN GOTO Z2 IF (ADJ1(J,I) = 2) OR (ADJ1(J,I) = 3) THEN GOTO Z3 POP = POP - 1 DEATHS = DEATHS + 1 A(J)[I,I] = " " ADJ(ADJJ(J,1),ADJI(I,1)) = ADJ(ADJJ(J,1),ADJI(I,1))-1 ADJ(ADJJ(J,2),ADJI(I,2)) = ADJ(ADJJ(J,2),ADJI(I,2))-1 ADJ(ADJJ(J,3),ADJI(I,3)) = ADJ(ADJJ(J,3),ADJI(I,3))-1 ADJ(ADJJ(J,4),ADJI(I,4)) = ADJ(ADJJ(J,4),ADJI(I,4))-1 ADJ(ADJJ(J,5),ADJI(I,5)) = ADJ(ADJJ(J,5),ADJI(I,5))-1 ADJ(ADJJ(J,6),ADJI(I,6)) = ADJ(ADJJ(J,6),ADJI(I,6))-1 ADJ(ADJJ(J,7),ADJI(I,7)) = ADJ(ADJJ(J,7),ADJI(I,7))-1 ADJ(ADJJ(J,8),ADJI(I,8)) = ADJ(ADJJ(J,8),ADJI(I,8))-1 RC(ADJJ(J,2)) = 1 RC(J)=1 RC(ADJJ(J,6)) = 1 GOTO Z3 Z2: IF ADJ1(J,I) <> 3 THEN GOTO Z3 POP = POP + 1 BIRTHS = BIRTHS + 1 A(J)[I,I] = "*" ADJ(ADJJ(J,1),ADJI(I,1)) = ADJ(ADJJ(J,1),ADJI(I,1))+1 ADJ(ADJJ(J,2),ADJI(I,2)) = ADJ(ADJJ(J,2),ADJI(I,2))+1 ADJ(ADJJ(J,3),ADJI(I,3)) = ADJ(ADJJ(J,3),ADJI(I,3))+1 ADJ(ADJJ(J,4),ADJI(I,4)) = ADJ(ADJJ(J,4),ADJI(I,4))+1 ADJ(ADJJ(J,5),ADJI(I,5)) = ADJ(ADJJ(J,5),ADJI(I,5))+1 ADJ(ADJJ(J,6),ADJI(I,6)) = ADJ(ADJJ(J,6),ADJI(I,6))+1 ADJ(ADJJ(J,7),ADJI(I,7)) = ADJ(ADJJ(J,7),ADJI(I,7))+1 ADJ(ADJJ(J,8),ADJI(I,8)) = ADJ(ADJJ(J,8),ADJI(I,8))+1 RC(ADJJ(J,2)) = 1 RC(J)=1 RC(ADJJ(J,6)) = 1 Z3: NEXT I Z4: NEXT J XXX1=XXX GOTO DISPLAY END