Compucolor.org – Virtual Media

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