Listing of file='BOUNCE.BAS;01' on disk='vmedia/ncc_1_5-sector.ccvf'
1 REM ** BOUNCING BALL - COPYRIGHT (C) 1979 BY TREVOR TAYLOR ** 2 REM 3 REM THIS PROGRAM SIMULATES A BOUNCING BALL INSIDE A CLOSED 4 REM CONTAINER. THE USER SPECIFIES THE ELASTICITY OF THE BALL 5 REM AND THE STRENGTH OF THE GRAVITY FIELD. 6 REM 7 REM THE CALCULATIONS ARE ONLY APPROXIMATE, BECAUSE THE 8 REM FULL-BLOWN EQUATIONS MAKE THE PROGRAM TOO SLOW TO 9 REM BE USEFUL. 10 REM 15 PLOT 12,29,19,14:PRINT "BOUNCING BALL":PRINT 17 REM ** DEFINE FUNCTIONS FOR THE BOUNCING ** 20 DEF FN BX(W)= W- (X- W)* E 22 DEF FN BY(W)= W- (Y- W)* E 23 REM ** THESE ARE THE CO-ORDS OF BOTTOM LEFT OF BOX ** 25 LX= 10:LY= 8:XL= 9:YL= 7 30 PLOT 29,18 35 INPUT "WOULD YOU LIKE INSTRUCTIONS ? (Y/N) ";A$ 36 IF A$= "Y" GOTO 1000 37 REM 38 REM ** ASK USER FOR ALL THE NECESSARY INFO ** 39 REM 40 PLOT 12,29,18:INPUT "WIDTH OF THE BOX (20-100) : ";RX 50 IF RX< 20THEN RX= 20 60 IF RX> 100THEN RX= 100 70 INPUT "HEIGHT OF THE BOX (20-100) : ";RY 80 IF RY< 20THEN RY= 20 90 IF RY> 100THEN RY= 100 95 HX= LX+ INT (RX):HY= LY+ INT (RY):XH= INT ((HX+ 1)/ 2)* 2:YH= INT ((HY+ 3)/ 4)* 4 100 INPUT "ELASTICITY (0-1) : ";E 105 IF E< 0OR E> 1GOTO 100 110 PRINT "GRAVITY (0-2) : ";:INPUT "";G 120 INPUT "STARTING SPEED (1-20) : ";V 125 IF V < 1OR V> 20 GOTO 120 130 INPUT "ANGLE TO FIRE BALL AT (0-90) : ";A 135 IF A< 0OR A> 90GOTO 130 140 IF G> 0.1* VTHEN G= 0.1* V 145 IF G< 0THEN G= 0 150 R= A* 3.14159/ 180 155 INPUT "LEAVE A TRAIL ? (Y OR N) ";OP$ 156 REM 157 REM ** SET UP THE INITIAL X AND Y VELOCITIES ** 158 REM AND THE STARTING CO-ORDS 159 REM 160 VX= V* COS (R) 170 VY= V* SIN (R) 180 X0= LX:Y0= LY 184 REM 185 REM ** DRAW THE BOX ** 186 REM 190 PLOT 12,29,17,2,253,XL,YL,242,XH,YL,XH,YH,XL,YH,XL,YL,255 200 PLOT 29,18,2,253,X0,Y0,255 210 REM 220 REM ********** MAIN LOOP ************ 230 REM 240 REM INCREMENT THE X AND Y CO-ORDS BY THE VELOCITY 250 REM THEN CHECK IF OUTSIDE THE BOX. 260 REM IF NECESSARY, FLIP THE X (OR Y) VELOCITY AND FIND 270 REM THE CORRECT POSITION INSIDE THE BOX. 280 REM 290 REM 300 X= X0+ VX 310 Y= Y0+ VY 320 IF X< = HXGOTO 350 330 VX= - E* VX 340 X= FN BX(HX):GOTO 380 350 IF X> = LXGOTO 380 360 VX= - E* VX 370 X= FN BX(LX) 375 REM 380 IF Y< = HYGOTO 410 390 VY= - E* VY 400 Y= FN BY(HY):GOTO 440 410 IF Y> = LYGOTO 440 420 VY= - E* VY 430 Y= FN BY(LY) 434 REM 435 REM ** LEAVE THE LAST BALL ON THE SCREEN IF A TRAIL REQD. ** 436 REM 440 IF OP$= "Y"GOTO 445 442 PLOT 29,16,2,253,X0,Y0,255 445 X= INT (X):Y= INT (Y):X0= X:Y0= Y 446 REM 447 REM ** SUBTRACT GRAVITY FROM THE Y VELOCITY ** 448 REM 449 IF Y< > LYTHEN VY= VY- G 450 PLOT 29,18,2,253,X,Y,255 454 REM 455 REM ** CHECK TO SEE IF THE BALL HAS "STOPPED" ** 456 REM 460 IF G< > 0AND Y< > LYGOTO 300 470 IF ABS (VX)> 1OR ABS (VY)> 1GOTO 300 500 PLOT 8 510 PLOT 3,0,0,15,29,20 520 INPUT "ANOTHER RUN ? (Y/N) ";A$ 530 IF A$= "Y" GOTO 10 540 LOAD "MENU":RUN 1000 PLOT 12,29,22 1010 PRINT "THIS PROGRAM SIMULATES A BALL BOUNCING INSIDE A BOX," 1020 PRINT "FOR WHICH YOU CHOOSE THE WIDTH AND HEIGHT." 1025 PRINT 1030 PRINT "THE BALL HAS A VARIABLE ELASTICITY, I.E., IT LOSES A" 1040 PRINT "CERTAIN AMOUNT OF ENERGY ON EACH BOUNCE UNTIL IT" 1050 PRINT "FINALLY STOPS. CHOOSING AN ELASTICITY OF 1.0 MAKES" 1060 PRINT "THE BALL BOUNCE FOREVER, SO YOU MUST USE <LINEFEED> TO" 1070 PRINT "BREAK OUT THE THE PROGRAM. (SOMETIMES THIS LEAVES THE" 1072 PRINT "FOREGROUND COLOR AS BLACK, AND YOU WON'T SEE THE READY MESSAGE.)" 1075 INPUT "TYPE <RETURN> TO CONTINUE ";A$:PLOT 12 1080 PRINT "ALSO, YOU CHOOSE THE STRENGTH OF THE GRAVITY FIELD" 1090 PRINT "ACTING ON THE BALL. NO GRAVITY, I.E., 0, IS ACCEPTABLE." 1095 PRINT 1100 PRINT "TO START THE BALL OFF, YOU MUST SPECIFY THE ANGLE AND" 1110 PRINT "SPEED WITH WHICH THE BALL IS SHOT OUT FROM THE BOTTOM" 1120 PRINT "LEFT-HAND CORNER OF THE BOX. THE ANGLE MUST BE FROM" 1130 PRINT "0 TO 90 DEGREES (0=TO THE RIGHT AND 90=STRAIGHT UP)," 1140 PRINT "AND THE SPEED IS ALSO LIMITED TO A MAXIMUM OF 20." 1150 INPUT "TYPE <RETURN> TO CONTINUE ";A$:PLOT 12 1160 PRINT "YOU MAY HAVE THE BALL LEAVE A TRAIL IF YOU LIKE." 1170 PRINT "THIS CAN CREATE SOME QUITE INTERESTING PICTURES," 1180 PRINT "ESPECIALLY IF THE ELASTICITY IS 1.0 AND GRAVITY IS 0.0" 1190 PRINT "BECAUSE THE TRAIL EVENTUALLY FILLS THE WHOLE BOX WITH" 1200 PRINT "A PATTERN." 1210 INPUT "TYPE <RETURN> TO CONTINUE ";A$:PLOT 12 1220 GOTO 40