OPTION BASE 0 RANDOMIZE TIMER SCREEN 13 pi = 3.1415926536# piq = pi / 2 xmin = 4 ymin = 4 xmax = 316 ymax = 196 bc = INT(RND(1) * 15) + 1: c = 0 forcol: fc = INT(RND(1) * 15) + 1: IF fc = bc THEN GOTO forcol GOSUB background x = xmax: y = ymax n = 10000 DIM x(n), y(n), xf(4), yf(4) FOR k = 0 TO 3 NEXT k GOSUB box n = 0 main: GOSUB getnumdir IF numdir = 0 THEN GOSUB trace IF numdir = 0 THEN GOTO xit d = INT(RND(1) * numdir) + 1 ON dir(d) GOSUB dir1, dir2, dir3, dir4 x(n) = x y(n) = y n = n + 1 x = x + xf y = y + yf GOSUB box GOTO main xit: 'PAINT (xmin + 1, ymin + 1), fc, bc delay = 0 keyin: delay = delay + 1 k$ = INKEY$ IF k$ = "" THEN GOTO keyin IF k$ = CHR$(27) THEN GOTO xit1 IF k$ = CHR$(32) OR delay = 2000 THEN RUN GOTO keyin xit1: END trace: n = n - 1 IF n = 0 THEN RETURN x = x(n) y = y(n) GOSUB getnumdir IF numdir = 0 THEN GOTO trace RETURN getnumdir: numdir = 0 IF POINT(x + 4, y) >= bc THEN numdir = numdir + 1 dir(numdir) = 1 END IF IF POINT(x, y - 4) >= bc THEN numdir = numdir + 1 dir(numdir) = 2 END IF IF POINT(x - 4, y) >= bc THEN numdir = numdir + 1 dir(numdir) = 3 END IF IF POINT(x, y + 4) >= bc THEN numdir = numdir + 1 dir(numdir) = 4 END IF RETURN box: LINE (x - 1, y - 1)-(x + 1, y + 1), c, BF RETURN box1: LINE (xx - 1, yy - 1)-(xx + 2, yy + 2), c, BF RETURN dir1: LINE (x + 2, y - 1)-(x + 2, y + 1), c xf = 4: yf = 0 RETURN dir2: LINE (x - 1, y - 2)-(x + 1, y - 2), c xf = 0: yf = -4 RETURN dir3: LINE (x - 2, y + 1)-(x - 2, y - 1), c xf = -4: yf = 0 RETURN dir4: LINE (x - 1, y + 2)-(x + 1, y + 2), c xf = 0: yf = 4 RETURN background: LINE (xmin - 2, ymin - 2)-(xmax + 2, ymax + 2), bc, BF RETURN FOR y = ymin TO ymax / 2 STEP 4 FOR x = xmin TO xmax STEP 4 notgrey: c = INT(RND(1) * (16 - bc)) + bc IF c = 8 THEN GOTO notgrey xx = x yy = y GOSUB box1 xx = xmax - x + 2 yy = ymax - y + 2 GOSUB box1 NEXT x NEXT y c = 0 RETURN