!***********************************!
! !
! LIFE4A.BAS !
! Conway's Game of Life !
! Implemented under AlphaBASIC !
! By Trygve Lode !
! !
!-----------------------------------!
! !
! Modified 8/8/85 !
! By Brad Horine !
! To allow inputting the 'seed' !
! pattern from disk !
! !
!***********************************!
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 name of file containing";
PRINT TAB(7,50); "'seed' pattern "; TAB(-1,9);
INPUT LINE FILENAME$
IF FILENAME$ = "END" THEN PRINT : END
LOOKUP FILENAME$, FOUND
IF FOUND<=0 THEN PRINT TAB(9,50); "File not found!"; CHR(7); &
TAB(10,50); "Hit RETURN to retry ";: INPUT LINE XX$: &
PRINT TAB(9,50); TAB(-1,9); TAB(10,50); TAB(-1,9);: &
GOTO ENTRY
OPEN #1, FILENAME$, INPUT
FOR FN = 1 TO 20
INPUT LINE #1, A(FN)
IF EOF(1) THEN FN=30
NEXT FN
CLOSE #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
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