' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2024.09.10.01.33]) on 2025.03.15 at 21:43 (Coordinated Universal Time) ' This program by Charlie Veniot demonstrates a way to simulate Object-Oriented Programming methods ' with GOSUB statements. This is possible because BAM allows the use of expressions with GOSUB statements. ' - Expressions must be within parentheses to be recognized as expressions.) ' - Expressions that result in a string, the string will be treated as a line label ' - Expressions that result in a number, the number will be treated as a line number ' ' NOTE: this currently only works in the "development" version of BAM found at https://bam-ide.tiddlyhost.com/ ' and will be released to "production" on a to-be-determined date. ' 🟠🟠🟠Declarations CONST ShapeDrawSub$(1 TO 2) = { "A100_CircleSub", "A200_SquareSub" }, _ maxShapes% = 570 TYPE tThingy x% ' thingy's center coordinate on x axis y% ' thingy's center coordinate on y axis r% ' thingy's outermost point c% ' thingy's colour shape$ ' thingy's shape-drawing GOSUB routine constant END TYPE DIM aThing( 1 TO maxShapes% ) AS tThingy ' 🟠🟠🟠Main Program SCREEN _NEWIMAGE( 400, 400, 17 ) FOR i% = 1 TO maxShapes% aThing(i%).x% = INT( RND * ( _WIDTH - 20 ) ) + 10 aThing(i%).y% = INT( RND * ( _HEIGHT - 20 ) ) + 10 aThing(i%).c% = INT( RND * 62 ) + 1 aThing(i%).r% = INT( RND * 10 ) + 1 aThing(i%).shape$ = ShapeDrawSub$( INT( RND * 2 ) + 1 ) NEXT i% FOR i% = 1 TO maxShapes% IF LABELEXISTS( aThing(i%).shape$ ) THEN GOSUB ( aThing(i%).shape$ ) NEXT i% END ' 🟠🟠🟠Gosub Routines A100_CircleSub: CIRCLE( aThing(i%).x%, aThing(i%).y% ), aThing(i%).r%, aThing(i%).c% RETURN A200_SquareSub: DRAW "BM" + aThing(i%).x% + "," + aThing(i%).y% DRAW "BE" + aThing(i%).r% px1% = POINT( 0 ) : py1% = POINT( 1 ) DRAW "BM" + aThing(i%).x% + "," + aThing(i%).y% DRAW "BF" + aThing(i%).r% px2% = POINT( 0 ) : py2% = POINT( 1 ) DRAW "BM" + aThing(i%).x% + "," + aThing(i%).y% DRAW "BG" + aThing(i%).r% px3% = POINT( 0 ) : py3% = POINT( 1 ) DRAW "BM" + aThing(i%).x% + "," + aThing(i%).y% DRAW "BH" + aThing(i%).r% px4% = POINT( 0 ) : py4% = POINT( 1 ) COLOR aThing(i%).c% LINE ( px1%, py1% ) TO ( px2%, py2%) : LINE TO ( px3%, py3% ) : LINE TO ( px4%, py4% ) : LINE TO ( px1%, py1% ) RETURN