Compucolor.org – Virtual Media

Listing of file='BOUNCE.BAS;01' on disk='vmedia/bounce_ball-sector.ccvf'

14 OUT 8,255:REM  ENABLE KEYBOARD
15 PLOT 30,20,29,17,27,24,14,12,3,26,5
18 PRINT "B O U N C E"
22 PLOT 15,3,15,31
26 PRINT "COPYRIGHT 1979  BY DAVID B. SUITS"
28 REM                       GENERAL STUDIES
29 REM                       ROCHESTER INSTITUTE OF TECHNOLOGY
30 REM                       ROCHESTER,  NY    14623
33 PLOT 6,100,14,3,17,19
34 REM 
35 PRINT "THIS PROGRAM NOT TO BE COPIED"
36 REM 
37 REM
38 PLOT 3,64,0:FOR J= 1TO 2000:NEXT
99 REM   INSTRUCTIONS
100 PLOT 15:GOSUB 4000
109 REM   FIRST PLAYER TO GET 'WINS' IS THE WINNER
110 WINS= 50
120 SC(1)= 0:SC(2)= 0
129 REM  TIME INCREMENT FOR PLOTTING BALL
130 T= .09
139 REM  FRICTION TO DECREASE HORZ. VELOCITY WHENEVER BALL HITS
140 F= .85
145 REM 

START EACH NEW ROUND HERE

149 REM   SET UP DISPLAY
150 OUT 8,247:REM  LOCK OUT KEYBOARD
160 GOSUB 3000
199 REM   PRINT SCORES & DETERMINE WHO GOES FIRST
200 FOR P= 1TO 2:GOSUB 500:NEXT
205 P= 1:IF RND (1)> .5THEN P= 2
209 REM   EACH PLAYER GETS 5 BALLS PER ROUND
210 B(1)= 0:B(2)= 0
299 REM  PRINT SCORE
300 GOSUB 500
305 OUT 8,255:REM  ENABLE KEYBOARD
309 REM   IS THERE A WINNER?
310 IF SC(P)= > WINSTHEN 9000
319 REM   ARE ALL POSSIBLE POINTS TAKEN?
320 IF N= 8THEN 150
329 REM   GET NEXT PLAYER
330 P= 2+ (P= 2)
339 REM   HAVE BOTH PLAYERS HAD 5 BALLS?
340 B(P)= B(P)+ 1:IF B(P)= 6THEN 150
350 PLOT 6,1- 5* (P= 2),3,1- 37* (P= 2),2:PRINT "BALL#"B(P)
399 REM  GET HEIGHT, ETC.
400 GOSUB 2000
409 REM   BOUNCE THE BALL
410 OUT 8,247:REM  LOCK OUT KEYBOARD
415 GOSUB 1000
419 REM   SEE IF PLAYER GOT ANY POINTS
420 GOSUB 600
430 OUT 8,255:REM  ENABLE KEYBOARD
440 GOTO 300
497 REM 

PRINT SCORE

500 PLOT 6,2,3,18- 37* (P= 2),0:PRINT SC(P)"  ":RETURN
597 REM 

CHECK FOR POINTS

600 N= 0:FOR K= 1TO 8:IF S(K)= 0THEN N= N+ 1:GOTO 620
610 IF PEEK (M(K)+ 1)< > 2THEN SC(P)= SC(P)+ S(K):S(K)= 0
620 NEXT
629 REM   CHECK FOR PENALTY POINTS
630 X= INT (X)
640 FOR J= 1TO 9STEP 2
650 IF X= > X(J)AND X< = X(J+ 1)THEN SC(P)= SC(P)- 2
660 NEXT
670 RETURN
997 REM 

BOUNCE THE BALL

1000 Z= 0:X= 6:Y= H:G= 32.2
1002 PLOT 6,7,30,2,X,Y+ 4
1005 XL= X:YL= Y:X= X+ V* T:IF X> L- 1THEN 1100
1010 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 1030
1020 Y= 0:Z= - Z* C:V= V* F:IF ABS (V)< 3AND ABS (Z)< .5THEN 1900
1030 PLOT XL,YL+ 4,X,Y+ 4:GOTO 1005
1100 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF INT (Y1)> DAND Y1< UTHEN Z= Z1:Y= Y1:GOTO 1200
1110 IF Y1= > U+ 1THEN Z= Z1:Y= Y1:X= L- 1:V= V* - F:GOTO 1160
1120 IF INT (Y1)= > UAND Z1> 0THEN Y= U- 1:Z= - Z* C:V= V* F:GOTO 1200
1130 IF INT (Y1)= DAND Z1< 0THEN Y= D+ 1:Z= - Z* C:V= V* F:GOTO 1200
1140 X= L- 1:V= V* - F:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 1160
1150 Y= 0:Z= - Z* C:V= V* F:IF ABS (V)< 3AND ABS (Z)< .5THEN 1900
1160 PLOT XL,YL+ 4,X,Y+ 4:XL= X:YL= Y:X= X+ V* T:IF X< 6THEN X= 6:V= V* - F:GOTO 1010
1165 IF X> L- 1THEN 1244
1170 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 1160
1180 GOTO 1150
1200 PLOT XL,YL+ 4,X,Y+ 4:XL= X:YL= Y:X= X+ V* T:IF X= > 126THEN X= 125:V= V* - F:GOTO 1310
1205 IF X< R+ 1THEN 1240
1210 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 1200
1220 Y= 0:Z= - Z* C:V= V* F:IF ABS (V)< 3AND ABS (Z)< .5THEN 1900
1230 GOTO 1200
1240 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF INT (Y1)> DAND Y1< UTHEN Z= Z1:Y= Y1:GOTO 1200
1241 IF Y1< D+ 1AND Z1< 0THEN Y= D+ 1:Z= - Z* C:V= V* F:GOTO 1200
1242 GOTO 1120
1244 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF INT (Y1)> DAND Y1< UTHEN Z= Z1:Y= Y1:GOTO 1160
1245 IF Y1< D+ 1AND Z1< 0THEN Y= D+ 1:Z= - Z* C:V= V* F:GOTO 1160
1246 GOTO 1420
1300 PLOT XL,YL+ 4,X,Y+ 4:XL= X:YL= Y:X= X+ V* T:IF X< R+ 1THEN 1400
1310 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 1300
1320 Y= 0:Z= - Z* C:V= V* F:IF ABS (V)< 3AND ABS (Z)< .5THEN 1900
1330 GOTO 1300
1400 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF INT (Y1)> DAND Y1< UTHEN Z= Z1:Y= Y1:GOTO 1160
1410 IF Y1= > U+ 1THEN Z= Z1:Y= Y1:X= R+ 1:V= V* - F:GOTO 1200
1420 IF INT (Y1)= > UAND Z1> 0THEN Y= U- 1:Z= - Z* C:V= V* F:GOTO 1160
1430 IF INT (Y1)= DAND Z1< 0THEN Y= D+ 1:Z= - Z* C:V= V* F:GOTO 1160
1440 X= R+ 1:V= V* - F:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 1200
1450 GOTO 1220
1900 PLOT 255,29:RETURN
1997 REM 

GET HEIGHT, ETC.

2000 LN= 3:FOR K= 1TO 3:GOSUB 2200:PRINT SPC( 25)"":NEXT
2010 LN= 3:GOSUB 2200:INPUT "HEIGHT (10-90): ";A$:H= VAL (A$)
2020 IF H< 10THEN H= 10
2030 IF H> 90THEN H= 90
2040 PLOT 30,6,33,2,4,HI+ 4,5,HI+ 4,4,H+ 4,5,H+ 4,255,29
2050 HI= H
2060 GOSUB 2200:INPUT "VLOCTY (1-100): ";A$:V= VAL (A$)
2070 IF V< 1THEN V= 1
2075 IF V> 100THEN V= 100
2080 GOSUB 2200:INPUT "BNCE COEFFICNT: ";A$:C= VAL (A$)
2090 IF C< .1THEN C= .1
2100 IF C> .85THEN C= .85
2110 PLOT 3,64,0:RETURN
2200 LN= LN+ 1:PLOT 6,1- 5* (P= 2),3,1- 37* (P= 2),LN:RETURN
2997 REM 

SET UP DISPLAY

3000 PLOT 6,0,12,6,32,3,63,8,27,10:PRINT SPC( 24)""
3010 PLOT 3,2,8:PRINT SPC( 24)""
3020 PLOT 6,6,3,1,8:FOR K= 1TO 5:PRINT "0    ";:NEXT
3030 PLOT 3,0,7:FOR K= 1TO 9STEP 2:PRINT 10- K"   ";:NEXT :PRINT
3040 PLOT 27,24,6,32,3,2,31:PRINT SPC( 61)"":PLOT 3,64,0
3047 REM   DETERMINE MIDDLE BARRIER POSITION
3048 REM   U=UPPER LIP  D=LOWER LIP
3049 REM   L=LEFT SIDE  R=RIGHT SIDE
3050 U= INT (20* RND (1))+ 20
3060 IF U/ 4< > INT (U/ 4)THEN U= U+ 1:GOTO 3060
3070 D= U- 9:IF RND (1)> .3THEN D= D- 4
3080 L= INT (60* RND (1))+ 30:IF L/ 2< > INT (L/ 2)THEN L= L+ 1
3090 R= L+ 1:GOSUB 3500
3099 REM   SET UP POINT VALUES IN S( ) & POKE INTO SCREEN
3150 S(1)= 9:S(2)= 8:S(3)= 5:S(4)= 3:S(5)= 5:S(6)= 9:S(7)= 8:S(8)= 8
3160 FOR K= 1TO 5:M(K)= 26492+ 384* K
3170 POKE M(K)+ 1,2:POKE M(K),S(K)+ 48
3180 NEXT
3190 X= 28544+ R+ 1
3200 M(6)= X- 128* (INT (U/ 4)+ 3):POKE M(6)+ 1,2:POKE M(6),S(6)+ 48
3210 M(7)= M(6)+ 256:POKE M(7)+ 1,2:POKE M(7),S(7)+ 48
3220 M(8)= X- 128* (INT (U/ 4)- 4):POKE M(8)+ 1,2:POKE M(8),S(8)+ 48
3299 REM  PRINT HEADINGS
3300 FOR K= 1TO 2:PLOT 6,1- 5* (K= 2),3,1- 37* (K= 2),0
3310 PRINT "PLAYER"K"   SCORE:"
3320 NEXT
3340 HI= 50:PLOT 6,36,2,4,HI+ 4,5,HI+ 4,255
3359 REM  PENALTY POINT SPOTS
3360 X(1)= 10:X(2)= 13:X(3)= INT ((L- 17)/ 2)+ 10:IF X(3)/ 2< > INT (X(3))/ 2THEN X(3)= X(3)+ 1
3363 X(4)= X(3)+ 3:X(5)= L- 8:X(6)= X(5)+ 3:X(7)= R+ 5:X(8)= X(7)+ 3
3365 X(9)= 118:X(10)= 121
3370 PLOT 30:FOR J= 1TO 9STEP 2:PLOT 6,20,3,X(J)/ 2,31:PRINT "-2";:PLOT 6,34:PRINT "a":NEXT
3380 PLOT 29:RETURN
3499 REM  DRAW MIDDLE BARRIER
3500 PLOT 6,36,2,L,95,242,L,U+ 4,240,136,253,L,D+ 4,242,L,4,240,136,255:RETURN
3997 REM 

INSTRUCTIONS

4000 L= 124:R= 126:D= 15:U= 100:X= 6:Y= 22.5:V= 21:C= .75
4005 Z= 0:G= 32.2:T= .09:F= .78:PLOT 30,6,35,2,X,Y+ 4:GOSUB 1005
4020 PLOT 6,35,12:PRINT
4030 PRINT "   THE OBJECT OF THIS GAME IS TO BOUNCE A BALL AROUND THE COURT"
4035 PRINT
4040 PRINT " AND WIN POINTS BY HITTING THE GREEN NUMBERS ON THE WALLS.  (IF"
4045 PRINT
4050 PRINT " THE BALL COMES TO REST ON ANY OF THE AREAS LABELED -2, YOU ARE"
4055 PRINT
4060 PRINT " PENALIZED 2 POINTS.)  THE FIRST PLAYER TO GET 50 POINTS IS THE"
4065 PRINT
4070 PRINT " WINNER."
4075 PRINT :PRINT
4080 PRINT "   PLAYERS ALTERNATE TURNS, AND AFTER EACH PLAYER HAS BOUNCED 5"
4085 PRINT
4090 PRINT " BALLS, THE DISPLAY IS RE-DRAWN AND A NEW ROUND BEGINS."
4095 PRINT :PRINT
4100 PRINT "   TO BOUNCE THE BALL YOU MUST SPECIFY THE INITIAL HEIGHT (0-90"
4105 PRINT
4110 PRINT " FEET), THE INITIAL VELOCITY (1-100 FT.PER SEC.) AND THE BALL'S"
4115 PRINT
4120 PRINT " 'BOUNCE COEFFICIENT' (GREATER THAN 0 AND A MAXIMUM OF .85)."
4125 PRINT :PRINT
4130 PRINT "   THE BOUNCE COEFFICIENT IS THE RATIO OF THE VELOCITY OF THE"
4140 PRINT "   BALL AFTER A BOUNCE TO THE VELOCITY BEFORE THE BOUNCE. FOR"
4150 PRINT "   EXAMPLE, A SUPER-BALL HAS A BOUNCE COEFFICIENT OF ABOUT .8"
4160 PRINT "   (VERY HIGH BOUNCE)."
4165 PRINT
4170 PRINT TAB( 14);
4180 INPUT "NOW PRESS RETURN TO BEGIN THE GAME ";A$
4190 RETURN
8997 REM 

PLAY AGAIN?

9000 PLOT 6,3,3,5,10:PRINT "*************"
9005 PLOT 6,1- 5* (P= 2),14,3,5,13:PRINT "PLAYER"P" WINS"
9010 PLOT 15,6,3,3,5,15:PRINT "*************"
9015 PLOT 6,7,3,5,17:PRINT "CARE TO"
9020 PLOT 3,5,18:INPUT "PLAY AGAIN? ";A$
9025 IF LEFT$ (A$,1)= "Y"OR LEFT$ (A$,1)= "O"THEN 110
9030 IF LEFT$ (A$,1)< > "N"THEN PLOT 3,17,18:PRINT SPC( LEN (A$))"":GOTO 9020
9050 LOAD "MENU":RUN