DECLARE SUB makeSurface () DECLARE SUB animate () DECLARE SUB makeDot (x!, y!) DECLARE SUB paintImage () SCREEN 13 DIM SHARED imgh(0 TO 50, 0 TO 50) PAINT (0, 0), 1 makeSurface paintImage animate SUB animate frm = 0 1 frm = frm + 5 lx = SIN(frm / 100) * 20 + 25 ly = SIN(frm / 71.32) * 20 + 25 lx = lx + SIN(frm / 34) * 10 ly = ly + SIN(frm / 45) * 10 FOR y = 2 TO 48 FOR x = 2 TO 48 d = SQR((x - lx) ^ 2 + (y - ly) ^ 2) b = (30 - d) / 4 v = imgh(x - 1, y) - imgh(x, y) bpx = (lx - x) * v v = imgh(x, y - 1) - imgh(x, y) bpy = (ly - y) * v b = b + (bpx + bpy) / (d / 2) IF b < 0 THEN b = 0 IF b > 15 THEN b = 15 PSET (x + 150, y), 16 + b NEXT x NEXT y CIRCLE (lx + 150, ly), 2, 12 GOTO 1 END SUB SUB makeDot (x, y) FOR x1 = -10 TO 10 FOR y1 = -10 TO 10 dist = SQR(x1 * x1 + y1 * y1) p = 4 - dist IF p < 0 THEN p = 0 imgx = x1 + x imgy = y1 + y IF imgx < 0 THEN imgx = 0 IF imgy < 0 THEN imgy = 0 IF imgx > 50 THEN imgx = 50 IF imgy > 50 THEN imgy = 50 imgh(imgx, imgy) = imgh(imgx, imgy) + p NEXT y1 NEXT x1 END SUB SUB makeSurface FOR x = 0 TO 10 makeDot RND * 50, RND * 50 NEXT x FOR x = 0 TO 45 STEP 2 makeDot x, x / 2 + 5 NEXT x FOR x = 5 TO 30 STEP 2 makeDot x, -x / 1.2 + 30 NEXT x END SUB SUB paintImage FOR x = 0 TO 50 FOR y = 0 TO 50 c = imgh(x, y) + 16 PSET (x, y), c NEXT y NEXT x END SUB