home *** CD-ROM | disk | FTP | other *** search
- 10 RANDOMIZE TIMER
- 20 CLS
- 21 PRINT : PRINT " The 'GAME OF LIFE' Helgi RUDD 1995 "
- 37 SCREEN 1
- 39 REM --- game of life ---
- 40 DIM a(120, 120), b(120, 120)
- 45 XO = 35 : YO = 90
- 50 REM --- two arrays for rule transfer ----
- 55 cls
- 60 FOR i = 1 TO 120
- 70 FOR l = 1 TO 120
- 80 LINE (l+YO, i+XO)-(l+YO, i+XO), 1
- 90 a(i, l) = 1
- 100 NEXT l
- 110 NEXT i
- 120 REM ---- screen white, ready for map -----
- 124 FOR i = 0 TO 10000
- 125 x = INT(RND(1) * 120) + 1
- 126 y = INT(RND(1) * 120) + 1
- 127 a(x, y) = 0: LINE (y+YO, x+XO)-(y+YO, x+XO), 0
- 128 NEXT i
- 129 GOTO 600
- 130 REM --- user defines start screen ----
- 135 REM
- 137 REM UP x = TOGGLE POINT
- 140 REM a
- 150 REM LEFT n -|- m RIGHT
- 160 REM z
- 170 REM DOWN
- 180 x = 40: y = 12
- 200 LOCATE y, x, 0: PRINT " ";
- 210 y$ = INKEY$: IF y$ = "" THEN GOTO 210
- 220 IF y$ = "x" THEN GOTO 300
- 230 IF y$ <> "a" AND y$ <> "z" AND y$ <> "m" AND y$ <> "n" AND y$ <> "q" THEN GOTO 210
- 240 IF a(x, y) = 1 THEN LINE (y, x)-(y, x), 1
- 250 IF y$ = "a" THEN y = y - 1
- 260 IF y$ = "z" THEN y = y + 1
- 270 IF y$ = "m" THEN x = x + 1
- 280 IF y$ = "n" THEN x = x - 1
- 285 IF y$ = "q" THEN GOTO 500: REM ++++ PRESS q TO QUIT ++++
- 290 IF x > 80 THEN x = 80
- 292 IF x < 1 THEN x = 1
- 294 IF y > 25 THEN y = 25
- 296 IF y < 1 THEN y = 1
- 299 GOTO 200
- 300 REM --- toggle point -----
- 310 IF a(x, y) = 1 THEN a(x, y) = 0: GOTO 210
- 320 IF a(x, y) = 0 THEN a(x, y) = 1: LINE (50 + y, 50 + x)-(50 + y, 50 + x), 1: GOTO 210
- 330 REM ---- end of screen setup -----
- 335 LOCATE 15, 25, 0: PRINT " PRESS Q TO EXIT WHILE RUNNING"
- 500 CLS : LOCATE 12, 20, 0: INPUT "ARE YOU READY FOR LIVENING (Y/N) "; q$
- 510 IF q$ <> "n" AND q$ <> "N" THEN GOTO 600
- 520 REM --- refresh screnn ---
- 530 FOR i = 1 TO 100
- 540 FOR j = 1 TO 100
- 550 IF a(i, j) = 1 THEN LINE (j+YO, i+XO)-(j+YO, i+XO), 1: GOTO 570
- 560 LINE (50 + y, 50 + x)-(50 + y, 50 + x), 0
- 570 NEXT j
- 580 NEXT i
- 590 GOTO 200
- 600 REM ---- NOW LIVEN ------
- 610 FOR xr = 1 TO 120
- 620 FOR yr = 1 TO 120
- 625 GOSUB 1000
- 630 IF a(xr, yr) = 1 AND bt = 3 THEN b(xr, yr) = 0: GOTO 670
- 640 IF a(xr, yr) = 0 AND bt >= 4 THEN b(xr, yr) = 1: GOTO 670
- 650 IF a(xr, yr) = 0 AND bt <= 1 THEN b(xr, yr) = 1: GOTO 670
- 660 b(xr, yr) = a(xr, yr)
- 670 NEXT yr
- 680 NEXT xr
- 690 REM---- display new array b ( x, y) ----
- 700 FOR xr = 1 TO 120
- 710 FOR yr = 1 TO 120
- 720 IF b(xr, yr) = 1 THEN LINE (yr+YO, xr+XO)-(yr+YO, xr+XO), 1
- 730 IF b(xr, yr) = 0 THEN LINE (yr+YO, xr+XO)-(yr+YO, xr+XO), 0
- 740 a(xr, yr) = b(xr, yr)
- 745 y$ = INKEY$: IF y$ = "q" OR y$ = "Q" THEN STOP
- 750 NEXT yr
- 760 NEXT xr
- 770 GOTO 610
- 1000 REM ------ black counter -------
- 1010 bt = 0
- 1015 IF xr - 1 < 1 THEN GOTO 1025
- 1020 IF a(xr - 1, yr) = 0 THEN bt = bt + 1
- 1025 IF xr + 1 > 120 THEN GOTO 1035
- 1030 IF a(xr + 1, yr) = 0 THEN bt = bt + 1
- 1035 IF yr - 1 < 1 THEN GOTO 1045
- 1040 IF a(xr, yr - 1) = 0 THEN bt = bt + 1
- 1045 IF yr + 1 > 120 THEN GOTO 1055
- 1050 IF a(xr, yr + 1) = 0 THEN bt = bt + 1
- 1055 IF xr + 1 > 120 OR yr + 1 > 120 THEN GOTO 1065
- 1060 IF a(xr + 1, yr + 1) = 0 THEN bt = bt + 1
- 1065 IF xr - 1 < 1 OR yr + 1 > 120 THEN GOTO 1075
- 1070 IF a(xr - 1, yr + 1) = 0 THEN bt = bt + 1
- 1075 IF xr + 1 > 120 OR yr - 1 < 1 THEN GOTO 1085
- 1080 IF a(xr + 1, yr - 1) = 0 THEN bt = bt + 1
- 1085 IF xr - 1 < 1 OR yr - 1 < 1 THEN GOTO 1100
- 1090 IF a(xr - 1, yr - 1) = 0 THEN bt = bt + 1
- 1100 RETURN
-
-