' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2026.05.16.03.15]) on 2026.06.12 at 02:46 (Coordinated Universal Time)
' This program by Charlie Veniot is based on a "Golden Ball"
' image shared by bplus as a fun graphics programming challenge/exercise
' (Post to the QB64pe forums: https://qb64phoenix.com/forum/showthread.php?tid=4731&pid=42149#pid42149)
'
' Nothing fancy here: just making use of DRAW statements to get circular shapes'

' 🟠🟠🟠 MAIN PROGRAM

  SCREEN _NEWIMAGE(211,211,17)

  Graphing_Loop_Start:
    c% = INT( RND * 61 ) + 1
    COLOR c%

    FOR A1% = 100 TO 489 STEP 1
        IF BETWEEN(A1%,300,480) THEN GOSUB DRAW_OUTER_EDGE
        IF BETWEEN(A1%, 120, 480) THEN GOSUB DRAW_INNER_EDGE : GOSUB DRAW_CENTER
        SLEEP 0.01
    NEXT A1%
    SLEEP 1
    FOR A1% = 0 TO 359 STEP 60
      DRAW "BM 105,105"
      DRAW "TA " + A1%
      DRAW "BU80"      
      PAINT (point(0), point(1)), c%, c%
      SLEEP 0.01
    NEXT A1%
    PAINT (0, 0), c%, c%
    PAINT (130, 105), c%, c%
    SLEEP 1
  GOTO Graphing_Loop_Start

END

' 🟠🟠🟠 GOSUB ROUTINES

DRAW_OUTER_EDGE:
  FOR A2% = 0 TO 300 STEP 60
    DRAW "BM 105,105"
    DRAW "TA " + A2%
    DRAW "BU50"
    DRAW "TA " + (A1% + A2%)
    DRAW "BU50"
    px1% = POINT(0) : py1% = POINT(1)
    PSET (px1%, py1%)
    DRAW "BM 105,105"
    DRAW "TA " + A2%
    DRAW "BU45"
    DRAW "TA " + (A1% + A2%)
    DRAW "BU45"
    px2% = POINT(0) : py2% = POINT(1)
    PSET (px2%, py2%)
    IF A1% MOD 4= 0 THEN LINE (px1%, py1%) TO (px2%, py2%)
  NEXT A2%
RETURN

DRAW_INNER_EDGE:
  DRAW "BM 105,105"
  DRAW "TA " + A1%
  DRAW "BU55"
  px1% = POINT(0) : py1% = POINT(1)
  PSET (px1%, py1%)
  DRAW "BM 105,105"
  DRAW "TA " + A1%
  DRAW "BU45"
  px2% = POINT(0) : py2% = POINT(1)
  PSET (px2%, py2%)
  IF A1% MOD 4= 0 THEN LINE (px1%, py1%) TO (px2%, py2%)
RETURN

DRAW_CENTER:
  DRAW "BM 105,105"
  DRAW "TA " + A1%
  DRAW "BU20"
  px1% = POINT(0) : py1% = POINT(1)
  PSET (px1%, py1%)
  IF A1% MOD 10 = 0 THEN LINE (px1%, py1%) TO (105, 105)
RETURN