' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2026.04.28.23.15]) on 2026.05.02 at 23:43 (Coordinated Universal Time)
' This program by Charlie Veniot
' Based on the "100 Doors" task at Rosetta Code
' (https://rosettacode.org/wiki/100_doors)
ALERT( "At any time, click/touch the screen. \n\n The program execution will pause until you release the click/touch. " )
' 🟠🟠🟠 Declarations / Settings
CONST prg$ = "100 Doors"
_TITLE prg$
SCREEN _NEWIMAGE( 220, 112, 15 )
CONST baseY% = 12, _
oDoorColor% = 56
' 🟠🟠🟠 Main Program
🏁🏁🏁RunLoopStart🏁🏁🏁:
PRINT prg$ + " Rosetta Code Task"
GOSUB A20_✨InitDoors
FOR pass% = 1 TO 100
LOCATE 9,1 : PRINT "PASS " + pass% + " "
GOSUB B10_🔖SetHighlights
GOSUB C10_🔘ToggleDoors
SLEEP 0.1
NEXT pass%
GOSUB B30_🔖ClearHighlights
LOCATE 11,1 : PRINT "Doors left open: "
GOSUB R10_📝ReportOpenDoors
SLEEP 7 : CLS
GOTO 🏁🏁🏁RunLoopStart🏁🏁🏁
END
' 🟠🟠🟠 GOSUB Routines
A10_🔁DoorsLoop:
FOR y% = 0 TO 4
FOR x% = 1 TO 20
GOSUB (DoorAction$)
IF _MOUSEBUTTON THEN WHILE _MOUSEBUTTON : WEND
SLEEP IFF( BETWEEN( pass%, 1, 30 ) AND ( pass% < 5 OR pass% MOD 10 = 0 ), 0.025, 0.001 )
NEXT x%
NEXT y%
RETURN
A20_✨InitDoors:
LET DoorAction$ = "A30_✨InitDoor" : GOSUB A10_🔁DoorsLoop
RETURN
A30_✨InitDoor:
LINE ( x% * 10, baseY% + y% * 10 ) TO ( x% * 10 + 7, baseY% + y% * 10 + 7 ), 63, B
LINE ( x% * 10 + 1, baseY% + y% * 10 + 1 ) TO ( x% * 10 + 6, baseY% + y% * 10 + 3 ), 7, BF
LINE ( x% * 10 + 1, baseY% + y% * 10 + 4 ) TO ( x% * 10 + 6, baseY% + y% * 10 + 6 ), 63, BF
RETURN
B10_🔖SetHighlights:
GOSUB B30_🔖ClearHighlights
LET DoorAction$ = "B20_🔖HighlightDoor" : GOSUB A10_🔁DoorsLoop
RETURN
B20_🔖HighlightDoor:
IF ( x% + 20 * y% ) MOD pass% = 0 THEN
LINE ( x% * 10, baseY% + y% * 10 + 8 ) _
TO ( x% * 10 + 7, baseY% + y% * 10 + 8 ), _
IFF( POINT(x% * 10, baseY% + y% * 10 + 8) = 50, 34, 50 )
END IF
RETURN
B30_🔖ClearHighlights:
FOR y% = 0 TO 4
LINE ( 0, baseY% + y% * 10 + 8 ) _
TO ( XMAX, baseY% + y% * 10 + 8 ), 0
NEXT y%
RETURN
C10_🔘ToggleDoors:
LET DoorAction$ = "C20_🔘ToggleDoor" : GOSUB A10_🔁DoorsLoop
RETURN
C20_🔘ToggleDoor:
IF ( x% + 20 * y% ) MOD pass% = 0 THEN
LET c% = POINT( x% * 10 + 1, baseY% + y% * 10 + 1 )
IF c% = 56 _
THEN GOSUB A30_✨InitDoor _
ELSE LINE ( x% * 10, baseY% + y% * 10 ) TO ( x% * 10 + 7, baseY% + y% * 10 + 7 ), 56, BF
GOSUB B20_🔖HighlightDoor
END IF
RETURN
R10_📝ReportOpenDoors:
LET pass% = 1
LET o% = 0
LET DoorAction$ = "R20_📝ReportOpenDoor" : GOSUB A10_🔁DoorsLoop
RETURN
R20_📝ReportOpenDoor:
LET c% = POINT( x% * 10, baseY% + y% * 10 )
IF c% = oDoorColor% THEN
PRINT ( x% + y% * 20 ) + "; ";
LET o% = o% + 1
IF o% MOD 5 = 0 THEN PRINT
GOSUB B20_🔖HighlightDoor
END IF
RETURN