' This BASIC Anywhere Machine program by Charlie Veniot ' is a port and mod of Dav's QB64pe program ' found at https://qb64phoenix.com/forum/showthread.php?tid=1838&pid=17786#pid17786 dh = 1000 screen _newimage(1600,dh,23) declare SUB ball (x, y, size, r, g, b) DO ball (int(RND * dh)+300, int(RND * dh), int(RND * 255) + 25, int(RND * 255), int(RND * 255), int(RND * 255)) _delay 0.1 LOOP SUB ball (x, y, size, r, g, b) 'This SUB draws a gradient ball with given color. 'see current display status displayStatus%% = _AUTODISPLAY 'turn off screen updates while we draw _DISPLAY reg = .4 'if size is larger than value colors given, 'adjust the reg value to step down at a slower rate. 'This prevents thick black rim around larger balls 'that have a too low a given color value. IF size > r AND size > g AND size > b THEN IF r > g AND r > b THEN reg = r / size * .4 IF g > r AND g > b THEN reg = g / size * .4 IF b > r AND b > g THEN reg = b / size * .4 END IF 'now draw the ball using CIRCLE. 'Using smaller STEP value than 1 prevents gaps. FOR s = 0 TO size STEP 1 CIRCLE (x, y), s, _RGB32(r, g, b) CIRCLE (x+1, y), s, _RGB32(r, g, b) CIRCLE (x, y+1), s, _RGB32(r, g, b) r = max(int(r - reg),0): g = max(int(g - reg),0): b = max(int(b - reg),0) NEXT 'show the ball _DISPLAY 'If autodislay was previously on, turn it back on 'IF displayStatus%% = 1 THEN _AUTODISPLAY END SUB