Examples
These examples are written for the implemented bunnyBASIC runtime in this repository, not for a generic BASIC dialect.
Hello world
10 PRINT "Hello, bunnyBASIC"
Conditionals
10 $TEMPERATURE = 18
20 IF $TEMPERATURE >= 20
30 PRINT "warm"
40 ELSE
50 PRINT "cool"
60 END IF
FOR loop
10 FOR $I = 0 TO 5
20 PRINT "step", $I
30 END FOR
WHILE loop
10 $N = 0
20 WHILE $N < 3
30 PRINT "while", $N
40 $N = $N + 1
50 END WHILE
Function that returns a value
10 PRINT DOUBLE(21)
20 FUNCTION DOUBLE($N)
30 RETURN $N + $N
40 END FUNCTION
Function that updates a global
10 $COUNT = 0
20 CALL BUMP()
30 CALL BUMP()
40 PRINT "count", $COUNT
50 FUNCTION BUMP() GLOBALS ($COUNT)
60 $COUNT = $COUNT + 1
70 END FUNCTION
Arrays
10 $NUMS = [1, 2, 3]
20 $NUMS[] = 4
30 PRINT "len", LEN($NUMS)
40 PRINT "first", $NUMS[0]
50 PRINT "last", POP($NUMS)
60 PRINT "len", LEN($NUMS)
Strings and conversions
10 $COUNT = 3
20 PRINT "ha" * $COUNT
30 PRINT DECIMAL($COUNT) / 2.0
One-shot timer
10 CALL HELLO("timer") AFTER 500 MS ID 1
20 DELAY 1 SEC
30 FUNCTION HELLO($NAME)
40 PRINT "hello", $NAME
50 END FUNCTION
Repeating timer
10 CALL TICK() EVERY 1 SEC ID 1
20 DELAY 3 SEC
30 CANCEL TIMER 1
40 PRINT "done"
50 FUNCTION TICK()
60 PRINT "tick", SECOND()
70 END FUNCTION
Immediate graphics
10 CLS
20 PALETTE 20, (255, 128, 0)
30 LINE (20, 20)-(180, 100), 20
40 CIRCLE (256, 256), 60, 12
50 PIXEL (256, 256), 15
60 PRINT "center color", GETPIXEL(256, 256)
Shape composition
10 CLS
20 $BODY = <256.0, 256.0> + (180.0 * CIRCLE())
30 $CUT = <300.0, 256.0> + (80.0 * CIRCLE())
40 $BAR = <256.0, 256.0> + ((<220.0, 30.0> * RECT()) ^ DEG(25.0))
50 DRAW ($BODY - $CUT) + $BAR
Pixel-art style helper shape
10 CLS
20 $FRAME = <256.0, 256.0> + (<180.0, 180.0> * RECT())
30 $HOLE = <256.0, 256.0> + (<140.0, 140.0> * RECT())
40 DRAW $FRAME - $HOLE
Clock with repeating timer
10 FUNCTION TIMER() GLOBALS ($HAND_SEC, $HAND_MIN, $HAND_HOUR)
20 $C = <255.0, 255.0>
30 $AS = DEG(6.0 * DECIMAL(SECOND()))
35 $AM = DEG(6.0 * DECIMAL(MINUTE()) + DECIMAL(SECOND()) / 10.0)
36 $AH = DEG(30.0 * DECIMAL(HOUR() MOD 12) + DECIMAL(MINUTE()) / 2.0)
40 CLS
50 CIRCLE (255, 255), 210, 8
57 DRAW $HAND_HOUR ^ $AH + $C
58 DRAW $HAND_MIN ^ $AM + $C
60 DRAW $HAND_SEC ^ $AS + $C
70 END FUNCTION
80 $HAND_SEC = RECT() * <2.0, 20.0> + <0.0, -190.0>
90 $HAND_MIN = RECT() * <4.0, 170.0> + <0.0, -85.0>
100 $HAND_HOUR = RECT() * <4.0, 100.0> + <0.0, -50.0>
110 CALL TIMER()
120 CALL TIMER() EVERY 1 SEC
REPL workflow
At the terminal prompt, these commands are useful while experimenting:
LIST
PRETTY
RUN
SAVE "demo.bas"
DIR
They are REPL commands, not normal numbered program lines.