' Reflecting Ball SCREEN 13 RANDOMIZE TIMER CONST w = 320, h = 200 CONST size = 5, col = 3, lincol = 5 y = 170: PSET (0, y), lincol FOR x = 1 TO 360 STEP 20 dy = RND * 9: IF RND > .5 THEN dy = -dy y = y + dy LINE -(x, y), lincol NEXT x PAINT (1, 199), lincol x = INT(RND * (w - size * 2)) + size: y = size + 4 dx = 1: vy = 1: jh = 5: xspd = 2 DO IF xspd > 0 THEN FOR d = 1 TO xspd x = x + dx IF x < size OR x > w - size THEN dx = -dx: SOUND 200, .3 NEXT d END IF y = y + vy vy = vy + .1 IF vy > 0 THEN ' check downwards for pixel data ty = y ' hold temporary y position FOR d = 1 TO vy ' scan from Y to next Y pos ty = ty + 1 IF POINT(x, ty + size + 1) = lincol THEN d = vy: vy = -jh: SOUND 200, .3: y = ty '+ vy END IF NEXT d END IF 'y = y + vy k$ = INKEY$ SELECT CASE k$ CASE "x": xspd = xspd + (1 AND xspd < 9) CASE "X": xspd = xspd - (1 AND xspd > 0) CASE "j": jh = jh + (1 AND jh < 7) CASE "J": jh = jh - (1 AND jh > 2) END SELECT LOCATE 1, 1: PRINT "(X)spd ="; xspd; "(J)ump ="; jh; " " CIRCLE (x, y), size, col WAIT &H3DA, 8 CIRCLE (x, y), size, 0 LOOP UNTIL k$ = CHR$(27) END