!***********************************! ! ! ! LIFE.BAS ! ! Conway's Game of Life ! ! Implemented under AlphaBASIC ! ! By David F. Pallmann ! ! ! !***********************************! MAP1 A(20,40), S, 1 !source array MAP1 B(20,40), S, 1 !destination array MAP1 I, F, 6 !loop index MAP1 J, F,6 !loop index MAP1 R, F, 6 !current row MAP1 C, F, 6 !current column MAP1 LR, F, 6 !low row MAP1 HR, F, 6 !high row MAP1 LC, F, 6 !low column MAP1 HC, F, 6 !high column MAP1 COUNT, F, 6 !life count MAP1 TEXT, S, 80 !text line MAP1 LOW, F, 6 ! MAP1 HIGH, F, 6 MAP1 GEN, F, 6 MAP1 TOTAL, F, 6 INIT: PRINT TAB(-1,0); FOR I = 1 TO 20 FOR J = 1 TO 40 B(I,J) = " " NEXT J NEXT I 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 life2, B(1,1), 20, 40, 1, 1 GET2: PRINT TAB(5,50); TAB(-1,9); PRINT TAB(7,50); TAB(-1,9); PRINT TAB(9,50); TAB(-1,9); DISPLAY: LR = 20 : HR = 0 LC = 40 : HC = 0 TOTAL = 0 FOR I = 1 TO 20 PRINT TAB(I+1,2); FOR J = 1 TO 40 IF B(I,J)="" THEN B(I,J) = " " PRINT B(I,J); IF B(I,J)="*" THEN TOTAL = TOTAL+1 : CALL WINDOW NEXT J NEXT I I = GEN+6 IF I>20 THEN I = I-15 PRINT TAB(I,45); "Generation"; GEN; PRINT " - Pop."; TOTAL; GEN = GEN+1 IF TOTAL=0 THEN PRINT TAB(22,50); : END MOVE: FOR I = 1 TO 20 FOR J = 1 TO 40 A(I,J) = B(I,J) NEXT J NEXT I GENERATE: FOR I = LR-1 TO HR+1 FOR J = LC-1 TO HC+1 CALL SCAN NEXT J NEXT I GOTO DISPLAY SCAN: COUNT = 0 FOR R = I-1 TO I+1 FOR C = J-1 TO J+1 IF R<1 OR R>20 THEN GOTO NEXT IF C<1 OR C>40 THEN GOTO NEXT IF R=I AND C=J THEN GOTO NEXT IF A(R,C)<>" " THEN COUNT = COUNT+1 NEXT: NEXT C NEXT R B(I,J) = " " IF A(I,J)=" " AND COUNT = 3 THEN B(I,J) = "*" IF A(I,J)="*" AND COUNT>1 AND COUNT<4 THEN B(I,J) = "*" RETURN WINDOW: IF IHR THEN HR = I IF JHC THEN HC = J RETURN END