' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2026.05.16.03.15]) on 2026.06.16 at 03:42 (Coordinated Universal Time)
' This program by Charlie Veniot
' Animated graphing of a circular "meander" using DRAW statements
' to get plot points
' see: https://en.wikipedia.org/wiki/Meander_(art)

ALERT( "At any time click/touch, and hold that click/touch, to pause the animation.\n\n" _
    +  "Release to click/touch to resume the animation.")

d% = 170

🏁🏁🏁run_again🏁🏁🏁:  

s = IFF( d% < 180, 0.03, 0.01 )
SCREEN _NEWIMAGE(d% * 2 + 1,d% * 2 + 1,17)
COLOR ,1
CLS
rndc% = INT( RND * 61 + 2 )
FOR iteration% = 1 TO 4

  c% = IFF(iteration% < 3, 63, rndc%)

  p1xlast% = -1 : p1ylast% = -1
  p2xlast% = -1 : p2ylast% = -1
  p3xlast% = -1 : p3ylast% = -1
  p4xlast% = -1 : p4ylast% = -1
  p5xlast% = -1 : p5ylast% = -1
  p6xlast% = -1 : p6ylast% = -1
  p7xlast% = -1 : p7ylast% = -1
  p8xlast% = -1 : p8ylast% = -1

  FOR i% = 0 TO 4
  FOR a% =  0 TO 72
      DRAW "TA" + (a% + i% * 72)

      IF iteration% < 3 OR BETWEEN(a%, 10, 70) THEN
         GOSUB CIRCLE_1
      END IF
      IF iteration% < 3 OR BETWEEN(a%, 15, 35) OR BETWEEN(a%, 45, 65) THEN
         GOSUB CIRCLE_2
      END IF
      IF iteration% < 3 OR BETWEEN(a%, 20, 30) OR BETWEEN(a%, 50, 60) THEN
         GOSUB CIRCLE_3
      END IF
      IF iteration% < 3 OR BETWEEN(a%, 20, 25) OR BETWEEN(a%, 55, 60) THEN
         GOSUB CIRCLE_4
      END IF
      IF iteration% < 3 OR BETWEEN(a%, 15, 25) OR BETWEEN(a%, 55, 65) THEN
         GOSUB CIRCLE_5
      END IF
      IF iteration% < 3 OR BETWEEN(a%, 10, 30) OR BETWEEN(a%, 50, 70) THEN
         GOSUB CIRCLE_6
      END IF
      IF iteration% < 3 OR BETWEEN(a%, 0, 35) OR BETWEEN(a%, 45, 72) THEN
         GOSUB CIRCLE_7
      END IF
      GOSUB CIRCLE_8
      IF iteration% MOD 2 = 0 THEN
        IF a% = 10 OR a% = 70 THEN LINE (p1x%,p1y%) TO (p6x%, p6y%), c%
        IF a% = 15 OR a% = 65 THEN LINE (p2x%,p2y%) TO (p5x%, p5y%), c%
        IF a% = 20 OR a% = 60 THEN LINE (p3x%,p3y%) TO (p4x%, p4y%), c%
        IF a% = 25 OR a% = 55 THEN LINE (p4x%,p4y%) TO (p5x%, p5y%), c%
        IF a% = 35 OR a% = 45 THEN LINE (p2x%,p2y%) TO (p7x%, p7y%), c%
        IF a% = 30 OR a% = 50 THEN LINE (p3x%,p3y%) TO (p6x%, p6y%), c%
      END IF
      SLEEP s
      WHILE _MOUSEBUTTON : WEND
  NEXT a%
  NEXT i%
  SLEEP s
  WHILE _MOUSEBUTTON : WEND
NEXT iteration%
SLEEP 1.5
WHILE _MOUSEBUTTON : WEND
PAINT (0,0), 0, c%
PAINT (d%,d%), 0, c%
SLEEP 1.5
WHILE _MOUSEBUTTON : WEND
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 1 - 75)
PAINT ( d%, POINT(1)-5 ), INT(RND * 62 + 2), c%
SLEEP 3
WHILE _MOUSEBUTTON : WEND
PAINT (0,0), INT(RND * 62 + 2), c%
SLEEP 3
WHILE _MOUSEBUTTON : WEND
PAINT (d%,d%), INT(RND * 62 + 2), c%
SLEEP 3
WHILE _MOUSEBUTTON : WEND
d% = INT( RND * 42 + 9 ) * 10
GOTO 🏁🏁🏁run_again🏁🏁🏁

END

' 🟠🟠🟠 GOSUB Routines

PEN_TO_CENTER:
  DRAW "BM" + d% + "," + d%
RETURN

PEN_TO_CIRCLE_1:
  DRAW "BU" + (d% - 1)
RETURN

CIRCLE_1:
  GOSUB PEN_TO_CENTER
  DRAW "BU" + (d% - 1)
  p1x% = POINT(0) : p1y% = POINT(1)
  PSET (p1x%, p1y%), c%
  IF p1xlast% > -1 AND BETWEEN(a%,11,70) _
     THEN LINE (p1xlast%, p1ylast%) TO (p1x%, p1y%), c%
  p1xlast% = p1x% : p1ylast% = p1y%
RETURN

CIRCLE_2:
     GOSUB PEN_TO_CENTER
     DRAW "BU" + (d% - 1 - 10)
     p2x% = POINT(0) : p2y% = POINT(1)
     PSET (p2x%, p2y%), c%
     IF p2xlast% > -1 AND ( BETWEEN(a%, 16, 35) OR BETWEEN(a%, 46, 65) ) _
        THEN LINE (p2xlast%, p2ylast%) TO (p2x%, p2y%), c%
     p2xlast% = p2x% : p2ylast% = p2y%
RETURN

CIRCLE_3:
   GOSUB PEN_TO_CENTER
   DRAW "BU" + (d% - 1 - 20)
   p3x% = POINT(0) : p3y% = POINT(1)
   PSET (p3x%, p3y%), c%
   IF p3xlast% > -1 AND ( BETWEEN(a%, 21, 30) OR BETWEEN(a%, 51, 60) ) _
      THEN LINE (p3xlast%, p3ylast%) TO (p3x%, p3y%), c%
   p3xlast% = p3x% : p3ylast% = p3y%
RETURN

CIRCLE_4:
   GOSUB PEN_TO_CENTER
   DRAW "BU" + (d% - 30)
   p4x% = POINT(0) : p4y% = POINT(1)
   PSET (p4x%, p4y%), c%
   IF p4xlast% > -1 AND ( BETWEEN(a%, 21, 25) OR BETWEEN(a%, 56, 60) ) _
      THEN LINE (p4xlast%, p4ylast%) TO (p4x%, p4y%), c%
   p4xlast% = p4x% : p4ylast% = p4y%
RETURN

CIRCLE_5:
   GOSUB PEN_TO_CENTER
   DRAW "BU" + (d% - 1 - 40)
   p5x% = POINT(0) : p5y% = POINT(1)
   PSET (p5x%, p5y%), c%
   IF p5xlast% > -1 AND ( BETWEEN(a%, 16, 25) OR BETWEEN(a%, 56, 65) ) _
      THEN LINE (p5xlast%, p5ylast%) TO (p5x%, p5y%), c%
   p5xlast% = p5x% : p5ylast% = p5y%
RETURN

CIRCLE_6:
   GOSUB PEN_TO_CENTER
   DRAW "BU" + (d% - 1 - 50)
   p6x% = POINT(0) : p6y% = POINT(1)
   PSET (p6x%, p6y%), c%
   IF p6xlast% > -1 AND ( BETWEEN(a%, 11, 30) OR BETWEEN(a%, 51, 70) ) _
      THEN LINE (p6xlast%, p6ylast%) TO (p6x%, p6y%), c%
   p6xlast% = p6x% : p6ylast% = p6y%
RETURN

CIRCLE_7:
  GOSUB PEN_TO_CENTER
  DRAW "BU" + (d% - 1 - 60)
  p7x% = POINT(0) : p7y% = POINT(1)
  PSET (p7x%, p7y%), c%
  IF p7xlast% > -1 AND ( BETWEEN(a%, 1, 35) OR BETWEEN(a%, 46, 72) ) _
     THEN LINE (p7xlast%, p7ylast%) TO (p7x%, p7y%), c%
  p7xlast% = p7x% : p7ylast% = p7y%
RETURN

CIRCLE_8:
  GOSUB PEN_TO_CENTER
  DRAW "BU" + (d% - 1 - 75)
  p8x% = POINT(0) : p8y% = POINT(1)
  PSET (p8x%, p8y%), 61
  IF p8xlast% > -1 _
     THEN LINE (p8xlast%, p8ylast%) TO (p8x%, p8y%), c%
  p8xlast% = p8x% : p8ylast% = p8y%
RETURN