Compucolor.org – Virtual Media

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

100 REM KY                  BOUNCE
110 REM     COPYRIGHT (C) 1979 DAVID B. SUITS
120 REM            GENERAL STUDIES
130 REM     ROCHESTER INSTITUTE OF TECHNOLOGY
140 REM        ROCHESTER,  NY    14623
145 REM 	     V4/27/80 RHT

150 OUT 8,4:PLOT 6,1,27,24,14,12,3,20,7
160 T$= "{d
{d  tu
vw  ab
vw  pb
as  tf
vi  {e
l":PRINT T$
170 PLOT 15,3,15,31:PRINT "COPYRIGHT(C) 1979 COMPUCOLOR CORP"
180 PLOT 3,64,0:FOR J= 1TO 1100:NEXT J
190 REM   INSTRUCTIONS
200 PLOT 15:GOSUB 1560
210 REM   FIRST PLAYER TO GET 'WINS' IS THE WINNER
220 WINS= 50
230 SC(1)= 0:SC(2)= 0
240 REM   TIME INCREMENT FOR PLOTTING BALL
250 T= .09
260 REM   FRICTION TO DECREASE HORZ. VELOCITY WHENEVER BALL HITS
270 F= .85
280 REM 

START EACH NEW ROUND HERE
290 REM   SET UP DISPLAY
300 GOSUB 1200
310 REM   PRINT SCORES & DETERMINE WHO GOES FIRST
320 FOR P= 1TO 2:GOSUB 550:NEXT
330 P= 1:IF RND (1)> .5THEN P= 2
340 REM   EACH PLAYER GETS 5 BALLS PER ROUND
350 B(1)= 0:B(2)= 0
360 REM   PRINT SCORE
370 GOSUB 550
380 REM   IS THERE A WINNER?
390 IF SC(P)= > WINSTHEN 1870
400 REM   ARE ALL POSSIBLE POINTS TAKEN?
410 IF N= 8THEN N= 0:GOTO 300
420 REM   GET NEXT PLAYER
430 P= 2+ (P= 2)
440 REM   HAVE BOTH PLAYERS HAD 5 BALLS?
450 B(P)= B(P)+ 1:IF B(P)= 6THEN 300
460 PLOT 6,1- 5* (P= 2),3,1- 37* (P= 2),2:PRINT "BALL#"B(P):REM 
470 REM   GET HEIGHT, ETC.
480 GOSUB 1060
490 REM   BOUNCE THE BALL
500 GOSUB 670
510 REM   SEE IF PLAYER GOT ANY POINTS
520 GOSUB 570
530 GOTO 370
540 REM 

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

CHECK FOR POINTS

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

BOUNCE THE BALL

670 Z= 0:X= 6:Y= H:G= 32.2
680 PLOT 6,3,30,2,X,Y+ 4
690 XL= X:YL= Y:X= X+ V* T:IF X> L- 1THEN 730
700 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 720
710 Y= 0:Z= - Z* C:V= V* F:IF ABS (V)< 3AND ABS (Z)< .5THEN 1040
720 PLOT XL,YL+ 4,X,Y+ 4:GOTO 690
730 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF INT (Y1)> DAND Y1< UTHEN Z= Z1:Y= Y1:GOTO 830
740 IF Y1= > U+ 1THEN Z= Z1:Y= Y1:X= L- 1:V= V* - F:GOTO 790
750 IF INT (Y1)= > UAND Z1> 0THEN Y= U- 1:Z= - Z* C:V= V* F:GOTO 830
760 IF INT (Y1)= DAND Z1< 0THEN Y= D+ 1:Z= - Z* C:V= V* F:GOTO 830
770 X= L- 1:V= V* - F:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 790
780 Y= 0:Z= - Z* C:V= V* F:IF ABS (V)< 3AND ABS (Z)< .5THEN 1040
790 PLOT XL,YL+ 4,X,Y+ 4:XL= X:YL= Y:X= X+ V* T:IF X< 6THEN X= 6:V= V* - F:GOTO 700
800 IF X> L- 1THEN 910
810 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 790
820 GOTO 780
830 PLOT XL,YL+ 4,X,Y+ 4:XL= X:YL= Y:X= X+ V* T:IF X= > 126THEN X= 125:V= V* - F:GOTO 950
840 IF X< R+ 1THEN 880
850 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 830
860 Y= 0:Z= - Z* C:V= V* F:IF ABS (V)< 3AND ABS (Z)< .5THEN 1040
870 GOTO 830
880 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF INT (Y1)> DAND Y1< UTHEN Z= Z1:Y= Y1:GOTO 830
890 IF Y1< D+ 1AND Z1< 0THEN Y= D+ 1:Z= - Z* C:V= V* F:GOTO 830
900 GOTO 750
910 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF INT (Y1)> DAND Y1< UTHEN Z= Z1:Y= Y1:GOTO 790
920 IF Y1< D+ 1AND Z1< 0THEN Y= D+ 1:Z= - Z* C:V= V* F:GOTO 790
930 GOTO 1000
940 PLOT XL,YL+ 4,X,Y+ 4:XL= X:YL= Y:X= X+ V* T:IF X< R+ 1THEN 980
950 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 940
960 Y= 0:Z= - Z* C:V= V* F:IF ABS (V)< 3AND ABS (Z)< .5THEN 1040
970 GOTO 940
980 Z1= Z- G* T:Y1= Y+ .5* (Z1+ Z)* T:IF INT (Y1)> DAND Y1< UTHEN Z= Z1:Y= Y1:GOTO 790
990 IF Y1= > U+ 1THEN Z= Z1:Y= Y1:X= R+ 1:V= V* - F:GOTO 830
1000 IF INT (Y1)= > UAND Z1> 0THEN Y= U- 1:Z= - Z* C:V= V* F:GOTO 790
1010 IF INT (Y1)= DAND Z1< 0THEN Y= D+ 1:Z= - Z* C:V= V* F:GOTO 790
1020 X= R+ 1:V= V* - F:IF Y1> 0THEN Z= Z1:Y= Y1:GOTO 830
1030 GOTO 860
1040 PLOT 255,29:RETURN
1050 REM 

GET HEIGHT, ETC.

1060 LN= 3:FOR K= 1TO 3:GOSUB 1180:PRINT SPC( 25)"":NEXT
1070 LN= 3:GOSUB 1180:OUT 8,255
1080 INPUT "HEIGHT (10-90): ";A$:H= VAL (A$)
1090 IF H< 10OR H> 90THEN LN= 3:GOSUB 1180:PRINT SPC( 26):GOTO 1070
1100 PLOT 30,6,33,2,4,HI+ 4,5,HI+ 4,4,H+ 4,5,H+ 4,255,29
1110 HI= H
1120 GOSUB 1180:INPUT "HORZ. VELOCITY: ";A$:V= VAL (A$)
1130 IF V< 1OR V> 500THEN LN= 4:GOSUB 1180:PRINT SPC( 26):LN= 4:GOTO 1120
1140 GOSUB 1180:INPUT "BNCE COEFFICNT: ";A$:C= VAL (A$)
1150 IF C< .1OR C> .85THEN LN= 5:GOSUB 1180:PRINT SPC( 26):LN= 5:GOTO 1140
1160 OUT 8,4:REM  DISABLE KEYBOARD
1170 PLOT 3,64,0:RETURN
1180 LN= LN+ 1:PLOT 6,1- 5* (P= 2),3,1- 37* (P= 2),LN:RETURN
1190 REM 

SET UP DISPLAY

1200 PLOT 6,0,12,6,32,3,63,8,27,10:PRINT SPC( 24)""
1210 PLOT 3,2,8:PRINT SPC( 24)""
1220 PLOT 6,6,3,1,8:FOR K= 1TO 5:PRINT "0    ";:NEXT
1230 PLOT 3,0,7:FOR K= 1TO 9STEP 2:PRINT 10- K"   ";:NEXT :PRINT
1240 PLOT 27,24,6,32,3,2,31:PRINT SPC( 61)"":PLOT 3,64,0
1250 REM   DETERMINE MIDDLE BARRIER POSITION
1260 REM   U=UPPER LIP  D=LOWER LIP
1270 REM   L=LEFT SIDE  R=RIGHT SIDE
1280 U= INT (20* RND (1))+ 20
1290 IF U/ 4< > INT (U/ 4)THEN U= U+ 1:GOTO 1290
1300 D= U- 9:IF RND (1)> .3THEN D= D- 4
1310 L= INT (60* RND (1))+ 30:IF L/ 2< > INT (L/ 2)THEN L= L+ 1
1320 R= L+ 1:GOSUB 1540
1330 REM   SET UP POINT VALUES IN S( ) & POKE INTO SCREEN
1340 S(1)= 9:S(2)= 8:S(3)= 5:S(4)= 3:S(5)= 5:S(6)= 9:S(7)= 8:S(8)= 8
1350 FOR K= 1TO 5:M(K)= 26492+ 384* K
1360 POKE M(K)+ 1,33:POKE M(K),S(K)+ 48
1370 NEXT
1380 X= 28544+ R+ 1
1390 M(6)= X- 128* (INT (U/ 4)+ 3):POKE M(6)+ 1,33:POKE M(6),S(6)+ 48
1400 M(7)= M(6)+ 256:POKE M(7)+ 1,33:POKE M(7),S(7)+ 48
1410 M(8)= X- 128* (INT (U/ 4)- 4):POKE M(8)+ 1,33:POKE M(8),S(8)+ 48
1420 REM  PRINT HEADINGS
1430 FOR K= 1TO 2:PLOT 6,1- 5* (K= 2),3,1- 37* (K= 2),0
1440 PRINT "PLAYER"K"   SCORE:"
1450 NEXT
1460 HI= 50:PLOT 6,36,2,4,HI+ 4,5,HI+ 4,255
1470 REM  PENALTY POINT SPOTS
1480 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
1490 X(4)= X(3)+ 3:X(5)= L- 8:X(6)= X(5)+ 3:X(7)= R+ 5:X(8)= X(7)+ 3
1500 X(9)= 118:X(10)= 121
1510 PLOT 30:FOR J= 1TO 9STEP 2:PLOT 6,52,3,X(J)/ 2,31:PRINT "-2";:PLOT 6,38:PRINT "a":NEXT
1520 PLOT 29:RETURN
1530 REM  DRAW MIDDLE BARRIER
1540 PLOT 6,36,2,L,95,242,L,U+ 4,240,136,253,L,D+ 4,242,L,4,240,136,255:RETURN
1550 REM 

INSTRUCTIONS

1560 L= 124:R= 126:D= 15:U= 100:X= 6:Y= 21:V= 23.4:C= .74
1570 Z= 0:G= 32.2:T= .09:F= .78:PLOT 30,6,3,2,X,Y+ 4:GOSUB 690
1580 PLOT 30,2,97,4,97,0,255,29
1585 FOR I= 1TO 8:FOR J= 1TO 6:DM= I* I:PLOT 6,J,2,97,0,255:NEXT J,I
1590 PLOT 3,64,0:FOR I= 1TO 1100:NEXT
1600 PLOT 6,6,12,3,20,2:PRINT T$:PRINT "":PRINT :PRINT
1610 PRINT "   THE OBJECT OF THIS GAME IS TO BOUNCE A BALL AROUND A PLAYING"
1620 PRINT " COURT AND  COLLECT  POINTS BY  HITTING  THE RED ON BLUE  POINT"
1630 PRINT " SQUARES. IF THE BALL COMES TO REST ON ANY OF THE AREAS LABELED"
1640 PRINT " '-2', YOU ARE PENALIZED 2 POINTS. THE  FIRST  PLAYER TO GET 50"
1650 PRINT " POINTS IS THE WINNER."
1660 PRINT
1670 PRINT "   PLAYERS ALTERNATE TURNS, AND AFTER EACH PLAYER HAS BOUNCED 5"
1680 PRINT " BALLS, THE DISPLAY IS RE-DRAWN AND A NEW ROUND BEGINS."
1690 PRINT
1700 PRINT "   TO BOUNCE THE BALL, YOU MUST SPECIFY AN INITIAL HEIGHT (10 -"
1710 PRINT " 90 FT), THE  INITIAL  VELOCITY (1 - 500 FT/SEC) AND THE BALL'S"
1720 PRINT " BOUNCE COEFFICIENT (.1 - .85)."
1730 PRINT
1740 PRINT "   THE BOUNCE COEFFICIENT IS THE RATIO OF THE VELOCITY OF THE"
1750 PRINT "   BALL AFTER A BOUNCE TO THE VELOCITY BEFORE THE BOUNCE. FOR"
1760 PRINT "   EXAMPLE, A SUPER-BALL HAS A BOUNCE COEFFICIENT OF ABOUT .8"
1770 PRINT "   (A LARGER BOUNCE COEFFICIENT MEANS A HIGHER BOUNCE)."
1780 PRINT
1790 PRINT TAB( 14);
1800 OUT 8,255:PRINT "NOW PRESS [RETURN] TO BEGIN THE GAME "
1810 POKE 33278,0
1820 PLOT 15,3,51,25,6,0:KB= PEEK (33278)
1830 IF KB< > 13THEN 1820
1840 OUT 8,4:REM  DISABLE KEYBOARD
1850 RETURN
1860 REM 

PLAY AGAIN?

1870 PLOT 6,3,3,5,10:PRINT "*************"
1880 PLOT 6,1- 5* (P= 2),14,3,5,13:PRINT "PLAYER"P" WINS"
1890 PLOT 15,6,3,3,5,15:PRINT "*************"
1900 PLOT 6,7,3,5,17:PRINT "CARE TO"
1910 OUT 8,255:PLOT 3,5,18:INPUT "PLAY AGAIN? ";A$:OUT 8,247
1920 IF LEFT$ (A$,1)= "Y"OR LEFT$ (A$,1)= "O"THEN 220
1930 IF LEFT$ (A$,1)< > "N"THEN PLOT 3,17,18:PRINT SPC( LEN (A$))"":GOTO 1910
1940 LOAD "MENU":RUN