Created
May 19, 2026 20:54
-
-
Save cfjedimaster/b582060738a1028badbd7c8da09f064b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 10 REM *** CONWAY'S GAME OF LIFE *** | |
| 20 REM *** APPLESOFT BASIC - HIRES *** | |
| 30 REM | |
| 40 REM HIRES PAGE 1: 280 x 192 PIXELS | |
| 50 REM CELL SIZE: 7 PIXELS WIDE, 6 TALL | |
| 60 REM GRID: 40 COLS x 32 ROWS | |
| 70 REM | |
| 80 DIM G(41,33): REM CURRENT GENERATION | |
| 90 DIM N(41,33): REM NEXT GENERATION | |
| 100 REM | |
| 110 REM --- SETUP --- | |
| 120 HOME | |
| 130 PRINT "GAME OF LIFE" | |
| 140 PRINT "" | |
| 150 PRINT "INITIALIZING..." | |
| 160 REM | |
| 170 REM DEFINE GRID DIMENSIONS | |
| 180 CW = 7: REM CELL WIDTH IN PIXELS | |
| 190 CH = 6: REM CELL HEIGHT IN PIXELS | |
| 200 GW = 40: REM GRID WIDTH (COLS) | |
| 210 GH = 32: REM GRID HEIGHT (ROWS) | |
| 220 REM | |
| 230 REM --- RANDOM SEED --- | |
| 240 FOR I = 1 TO GW | |
| 250 FOR J = 1 TO GH | |
| 260 G(I,J) = INT(RND(1) * 2) | |
| 270 NEXT J | |
| 280 NEXT I | |
| 290 REM | |
| 300 REM --- SWITCH TO HIRES --- | |
| 310 HGR | |
| 320 HCOLOR= 3: REM WHITE | |
| 330 REM | |
| 340 REM --- DRAW INITIAL STATE --- | |
| 350 GOSUB 1000 | |
| 360 REM | |
| 370 REM --- MAIN LOOP --- | |
| 380 GN = 0: REM GENERATION COUNTER | |
| 390 REM | |
| 400 REM COMPUTE NEXT GENERATION | |
| 410 FOR I = 1 TO GW | |
| 420 FOR J = 1 TO GH | |
| 430 REM COUNT LIVE NEIGHBOURS (WRAP) | |
| 440 NB = 0 | |
| 450 FOR DX = -1 TO 1 | |
| 460 FOR DY = -1 TO 1 | |
| 470 IF DX = 0 AND DY = 0 THEN 500 | |
| 480 XI = I + DX: YI = J + DY | |
| 490 IF XI < 1 THEN XI = GW | |
| 495 IF XI > GW THEN XI = 1 | |
| 496 IF YI < 1 THEN YI = GH | |
| 497 IF YI > GH THEN YI = 1 | |
| 500 NB = NB + G(XI,YI) | |
| 510 NEXT DY | |
| 520 NEXT DX | |
| 530 REM APPLY RULES | |
| 540 IF G(I,J) = 1 AND (NB = 2 OR NB = 3) THEN N(I,J) = 1: GOTO 570 | |
| 550 IF G(I,J) = 0 AND NB = 3 THEN N(I,J) = 1: GOTO 570 | |
| 560 N(I,J) = 0 | |
| 570 NEXT J | |
| 580 NEXT I | |
| 590 REM | |
| 600 REM COPY NEXT -> CURRENT AND DRAW CHANGES | |
| 610 FOR I = 1 TO GW | |
| 620 FOR J = 1 TO GH | |
| 630 IF N(I,J) = G(I,J) THEN 680 | |
| 640 G(I,J) = N(I,J) | |
| 650 IF G(I,J) = 1 THEN HCOLOR= 3: GOTO 670 | |
| 660 HCOLOR= 0 | |
| 670 GOSUB 1100 | |
| 680 NEXT J | |
| 690 NEXT I | |
| 700 REM | |
| 710 GN = GN + 1 | |
| 720 REM | |
| 730 REM SHOW GENERATION IN TEXT ROW | |
| 740 VTAB 22: HTAB 1 | |
| 750 PRINT "GEN: ";GN;" "; | |
| 760 REM | |
| 770 REM CHECK FOR KEYPRESS TO QUIT | |
| 780 IF PEEK(49152) > 127 THEN POKE 49168,0: GOTO 900 | |
| 790 REM | |
| 800 GOTO 400 | |
| 810 REM | |
| 900 REM --- QUIT --- | |
| 910 TEXT : HOME | |
| 920 PRINT "LIFE ENDED AFTER ";GN;" GENERATIONS." | |
| 930 END | |
| 940 REM | |
| 1000 REM ============================= | |
| 1010 REM SUBROUTINE: DRAW FULL GRID | |
| 1020 REM ============================= | |
| 1030 FOR I = 1 TO GW | |
| 1040 FOR J = 1 TO GH | |
| 1050 IF G(I,J) = 1 THEN HCOLOR= 3: GOTO 1070 | |
| 1060 HCOLOR= 0 | |
| 1070 GOSUB 1100 | |
| 1080 NEXT J | |
| 1090 NEXT I | |
| 1095 RETURN | |
| 1096 REM | |
| 1100 REM ============================= | |
| 1110 REM SUBROUTINE: DRAW CELL (I,J) | |
| 1120 REM USES CURRENT HCOLOR | |
| 1130 REM ============================= | |
| 1140 X1 = (I - 1) * CW | |
| 1150 Y1 = (J - 1) * CH | |
| 1160 X2 = X1 + CW - 2 | |
| 1170 Y2 = Y1 + CH - 2 | |
| 1180 FOR YP = Y1 TO Y2 | |
| 1190 HPLOT X1, YP TO X2, YP | |
| 1200 NEXT YP | |
| 1210 RETURN |
Comments are disabled for this gist.