RosettaCodeData/Task/Galton-box-animation/BBC-BASIC/galton-box-animation.basic
2023-07-01 13:44:08 -04:00

49 lines
1.3 KiB
Text

maxBalls% = 10
DIM ballX%(maxBalls%), ballY%(maxBalls%)
VDU 23,22,180;400;8,16,16,128
ORIGIN 180,0
OFF
REM Draw the pins:
GCOL 9
FOR row% = 1 TO 7
FOR col% = 1 TO row%
CIRCLE FILL 40*col% - 20*row% - 20, 800 - 40*row%, 12
NEXT
NEXT row%
REM Animate
last% = 0
tick% = 0
GCOL 3,3
REPEAT
IF RND(10) = 5 IF (tick% - last%) > 10 THEN
FOR ball% = 1 TO maxBalls%
IF ballY%(ball%) = 0 THEN
ballX%(ball%) = 0
ballY%(ball%) = 800
last% = tick%
EXIT FOR
ENDIF
NEXT
ENDIF
FOR ball% = 1 TO maxBalls%
IF ballY%(ball%) CIRCLE FILL ballX%(ball%), ballY%(ball%), 12
IF POINT(ballX%(ball%),ballY%(ball%)-10) = 12 OR ballY%(ball%) < 12 THEN
IF ballY%(ball%) > 500 END
ballY%(ball%) = 0
ENDIF
NEXT
WAIT 2
FOR ball% = 1 TO maxBalls%
IF ballY%(ball%) THEN
CIRCLE FILL ballX%(ball%), ballY%(ball%), 12
ballY%(ball%) -= 4
IF POINT(ballX%(ball%),ballY%(ball%)-10) = 9 THEN
ballX%(ball%) += 40 * (RND(2) - 1.5)
ENDIF
ENDIF
NEXT
tick% += 1
UNTIL FALSE