Compucolor.org – Virtual Media

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

1 X= RND (- PEEK (33209))
2 PLOT 30,16:PLOT 12
5 HC= PEEK (33278)
10 DIM PL(7,9),P5(10,2)
15 DIM SC(2,11,3)
17 DIM FR(2),TF(2,3)
19 FR(1)= 1:FR(2)= 1
20 GOSUB 800:GOSUB 830
100 PLOT 12:PLOT 15
105 PLOT 30,17:PLOT 29,19
108 W= 10
110 FOR X= 0TO W
120 PLOT 3,0,X
130 FOR Y= 0TO 61:PRINT "`";:NEXT Y
135 PRINT
140 NEXT X
142 PLOT 3,19,11,6,6:PRINT "PRESS ANY KEY TO ROLL BALL"
145 GOSUB 5000:REM  SET UP PINS
146 GOSUB 5050:REM  SET UP SCOREBOARD
147 FH= 1:GOTO 10020
148 REM
150 X= 3:POKE (33278),32
160 PLOT 30,17:PLOT 29,19
165 FOR Y= 1TO W- 1:PLOT 3,X,Y:PLOT 29,16:PRINT "#":PLOT 3,X,Y- 1:PLOT 29,19:PRINT "`":GOSUB 1000:NEXT Y
170 FOR Y= W- 1TO 1STEP - 1:PLOT 3,X,Y:PLOT 29,16:PRINT "#":PLOT 3,X,Y+ 1:PLOT 29,19:PRINT "`":GOSUB 1000:NEXT Y
190 GOTO 160
200 REM  PIN HITTING SUBROUTINE
202 Y= YH:PH= 0
205 IF FH> 1THEN 210
207 RS= RND (1):IF RS> .2AND RS< .8AND (Y= 4OR Y= 6)THEN PH= 10:GOTO 900
210 SP= RND (1):SP= (INT (SP* 10))/ 10:IF SP> .6THEN 210
220 FOR X= 1TO 7
225 IF SP> .3THEN 240
230 IF PL(X,Y- 1)> 0THEN GOSUB 300:REM  PIN HIT LEFT
240 IF PL(X,Y)> 0THEN GOSUB 400:REM  PIN HIT CENTER
245 IF SP< .3THEN 260
250 IF PL(X,Y+ 1)> 0THEN GOSUB 500:REM  PIN HIT RIGHT
255 IF H1> 0THEN GOSUB 850
257 H1= 0
260 NEXT X
270 GOTO 10000
300 IF SP= 0THEN XI= 1:YI= .166667:GOTO 330
310 IF SP= .1THEN XI= 1:YI= .5:GOTO 330
320 IF SP= .2THEN XI= .5:YI= .75:GOTO 330
325 XI= 0:YI= 1
330 PD= PL(X,Y- 1):GOSUB 600:PL(X,Y- 1)= 0:PH= PH+ 1
340 HX= X:HY= Y- 1
350 HX= HX+ XI:HY= HY- YI:IX= INT (HX):IY= INT (HY)
360 IF IX> 7OR IY< 2OR IY> 8THEN GOSUB 850:RETURN
370 IF PL(IX,IY)> 0THEN PD= PL(IX,IY):GOSUB 600:PL(IX,IY)= 0:PH= PH+ 1
380 GOTO 350
400 IF SP= 0THEN XI= .5:YI= .75:GOTO 470
410 IF SP= .1THEN XI= 1:YI= .5:GOTO 470
420 IF SP= .2THEN XI= 1:YI= .166667:GOTO 470
430 IF SP= .3THEN XI= 1:YI= 0:GOTO 470
440 IF SP= .4THEN XI= 1:YI= - .166667:GOTO 470
450 IF SP= .5THEN XI= 1:YI= - .5:GOTO 470
460 IF SP= .6THEN XI= .5:YI= - .75
470 HX= X:HY= Y:PD= PL(X,Y):GOSUB 600:PL(X,Y)= 0:PH= PH+ 1
480 GOTO 350
500 IF SP= .3THEN XI= 0:YI= - 1:GOTO 540
510 IF SP= .4THEN XI= .5:YI= - .75
520 IF SP= .5THEN XI= 1:YI= - .5:GOTO 540
530 IF SP= .6THEN XI= 1:YI= - .166667
540 HX= X:HY= Y+ 1:PD= PL(X,Y+ 1):PL(X,Y+ 1)= 0:GOSUB 600:PH= PH+ 1
550 GOTO 350
600 REM  PIN RESETTER
610 PLOT 30,17:PLOT 29,19
620 PLOT 3,P5(PD,1),P5(PD,2):PRINT "`":RETURN
799 REM  SUB. 800 SETS UP WORK ARRAY
800 FOR X= 0TO 7:FOR Y= 0TO 9:PL(X,Y)= 0:NEXT Y:NEXT X
810 PL(1,5)= 1:PL(3,4)= 2:PL(3,6)= 3:PL(5,3)= 4:PL(5,5)= 5:PL(5,7)= 6:PL(7,2)= 7:PL(7,4)= 8:PL(7,6)= 9
820 PL(7,8)= 10:RETURN
830 REM  SET UP PIN LOC. ARRAY
835 RESTORE 5000:FOR X= 1TO 10:READ P5(X,1),P5(X,2):NEXT X:RETURN
850 REM  BALL DEFLECTION SUBROUTINE
860 IF SP= 0THEN SP= .1:RETURN
862 IF SP= .1THEN SP= .2:RETURN
865 IF SP= .2THEN SP= .3:RETURN
867 IF SP= .3THEN RETURN
868 IF SP= .4THEN SP= .3:RETURN
870 IF SP= .5THEN SP= .4:RETURN
880 IF SP= .6THEN SP= .5:RETURN
890 PRINT "ERROR!!! SP=";SP;" --- OUT OF RANGE!!!":END
900 RESTORE 500
910 PLOT 30,17:PLOT 29,19
920 FOR P1= 1TO 10:READ A:READ B:PLOT 3,A,B:PRINT "`":NEXT P1
930 GOTO 10000
1000 NC= PEEK (33278):IF NC< > 32THEN PLOT 28:PLOT 30,17:PLOT 29,19:PRINT "`":GOTO 2000
1010 RETURN
2000 YH= Y:ON YGOTO 2100,2200,2300,2400,2500,2600,2700,2800,2900
2010 PRINT "ERROR 1:";X:END
2020 PLOT 3,61,Y:PRINT "`":NEXT Y:GOTO 150
2100 PH= 0:MD= 60:GOSUB 4000:GOTO 10000
2110 GOTO 10000
2200 MD= 59:GOSUB 4000:GOTO 200
2300 MD= 57:GOSUB 4000:GOTO 200
2400 MD= 55:GOSUB 4000:GOTO 200
2500 MD= 53:GOSUB 4000:GOTO 200
2600 MD= 55:GOSUB 4000:GOTO 200
2700 MD= 57:GOSUB 4000:GOTO 200
2800 MD= 59:GOSUB 4000:GOTO 200
2900 PH= 0:MD= 60:GOSUB 4000:GOTO 10000
4000 REM  BALL ROLL SUBROUTINE
4010 FOR X= 3TO MD:PLOT 30,17:PLOT 29,19:PLOT 3,X- 1,Y:PRINT "`":PLOT 30,16:PLOT 3,X,Y:PRINT " ":NEXT X
4020 PLOT 3,X- 1,Y:PLOT 30,17:PLOT 29,19:PRINT "`"
4040 RETURN
4050 FOR X= 0TO 5:FOR Y= 0TO W:PLOT 3,X,Y:PRINT "`":NEXT Y:NEXT X:RETURN
5000 DATA 54,5,56,4,56,6,58,3,58,5,58,7,60,2,60,4,60,6,60,8
5010 RESTORE 5000:PLOT 30,23
5020 FOR PS= 1TO 10:READ X:READ Y:PLOT 3,X,Y:PRINT " ":NEXT PS:RETURN
5050 PLOT 30,16:PLOT 29,23
5060 X= 57:GOSUB 5150
5070 X= 33:GOSUB 5150
5080 PLOT 3,0,16:PLOT 29,19
5090 PRINT "   1     2     3     4     5     6     7     8     9     10":RETURN
5150 FOR Y= 0TO 96STEP 12
5160 PLOT 2,Y,X,242,Y+ 12,X,Y+ 12,X- 19,Y,X- 19,Y,X,255
5170 PLOT 2,Y+ 6,X,242,Y+ 6,X- 7,Y+ 12,X- 7,255
5180 NEXT Y
5190 PLOT 2,108,X,242,120,X,120,X- 19,108,X- 19,255
5200 PLOT 2,108,X- 7,242,120,X- 7,255
5210 PLOT 2,112,X,242,112,X- 6,255
5220 PLOT 2,116,X,242,116,X- 6,255
5230 RETURN
6000 REM  SCORE SUBROUTINE
10000 GOSUB 4050:GOSUB 15000
10001 IF PH= 10THEN GOSUB 5000
10002 IF FH= 4THEN 10010
10003 REM  IFPH=10THEN10010
10005 FH= FH+ 1:IF FH< 3THEN 150
10007 IF FR(PN)< 10THEN 10010
10008 IF FH= 4THEN FH= 3:IF PH= 10THEN GOSUB 500
10009 GOTO 150
10010 FR(PN)= FR(PN)+ 1:IF PN= 1THEN PN= 2:GOTO 10050
10020 PN= 1:F1= F1+ 1:IF F1> 10THEN 10300:REM  FINALS
10050 PLOT 3,2,13:PLOT 30,16:PLOT 29,18
10060 PRINT "PLAYER";PN;"'S TURN"
10065 FH= 1
10070 GOSUB 5000:GOSUB 800
10080 GOTO 148
10300 FOR X= 1TO 1000:NEXT X:PLOT 30,16:PLOT 29,17:PLOT 12
10310 PLOT 3,0,12:IF SC(1,10,3)= SC(2,10,3)THEN PRINT "IT'S A TIE!!!":PRINT :GOTO 10330
10312 PRINT "PLAYER";:IF SC(1,10,3)> SC(2,10,3)THEN WP= 1:GOTO 10320
10315 WP= 2
10320 PRINT WP;" WINS.":PRINT
10330 INPUT "ANOTHER GAME? (Y/N) ";A$
10340 IF A$= "Y"THEN RUN
10350 IF A$< > "N"THEN 10330
10360 END
15000 REM  CALCULATE SCORE
15025 IF FH= 3AND PH= 0THEN H$= "-":GOTO 20000
15050 IF FH= 1AND PH= 10AND FR(PN)= 10THEN FH= 1:H$= "X":SC(PN,FR(PN),1)= 3:GOTO 20000
15100 IF FH= 1AND PH= 10THEN FH= 2:H$= "X":SC(PN,FR(PN),1)= 3:GOTO 20000
15120 IF FH= 2AND SC(PN,FR(PN),2)+ PH= 10THEN H$= "/":SC(PN,FR(PN),1)= 2:GOTO 20000
15140 IF PH= 0THEN H$= "-":GOTO 20000
15160 IF FH> 1THEN H$= RIGHT$ (STR$ (PH),1):SC(PN,FR(PN),2)= SC(PN,FR(PN),2)+ PH:GOTO 20000
15180 IF FH= 1THEN H$= RIGHT$ (STR$ (PH),1):SC(PN,FR(PN),2)= PH:GOTO 20000
15200 PRINT "ERROR DURING SCOREKEEPING":END
20000 IF FR(PN)= 10THEN 22000
20002 PLOT 30,16:PLOT 29,17:GOSUB 21010
20005 FOR X= 1TO FR(PN)
20010 IF SC(PN,X,1)< = 0THEN 20040
20020 SC(PN,X,1)= SC(PN,X,1)- 1:SC(PN,X,2)= SC(PN,X,2)+ PH
20030 IF SC(PN,X,1)> 0THEN 20100
20040 SC(PN,X,3)= SC(PN,X,2)+ SC(PN,X- 1,3)
20050 IF X< FR(PN)THEN WF= X:FV= SC(PN,X,3):GOSUB 21000:GOTO 20100
20060 IF FH= 1THEN 20100
20070 FV= SC(PN,X,3):WF= FR(PN):GOSUB 21000
20100 NEXT X:RETURN
21000 PX= - 4+ (WF* 6):PY= 15+ 6* PN:PLOT 3,PX,PY:PLOT 14:PRINT RIGHT$ (STR$ (FV),3):PLOT 15:RETURN
21010 PX= (- 5+ (FR(PN)* 6))+ (FH- 1)* 3:PY= 12+ PN* 6:PLOT 3,PX,PY:PRINT H$:RETURN
22000 REM  TENTH FRAME ROUTINE
22010 TF(PN,FH)= PH:SC(PN,10,2)= TF(PN,1)+ TF(PN,2)+ TF(PN,3)
22020 PLOT 30,16:PLOT 29,17
22060 IF SC(PN,8,1)> 0THEN SC(PN,8,1)= SC(PN,8,1)- 1:SC(PN,8,2)= SC(PN,8,2)+ PH
22080 IF SC(PN,8,1)> 0THEN 22150
22100 SC(PN,8,3)= SC(PN,8,2)+ SC(PN,7,3):FV= SC(PN,8,3):WF= 8:GOSUB 21000
22150 IF SC(PN,9,1)> 0THEN SC(PN,9,1)= SC(PN,9,1)- 1:SC(PN,9,2)= SC(PN,9,2)+ PH
22170 IF SC(PN,9,1)> 0THEN 22220
22190 SC(PN,9,3)= SC(PN,9,2)+ SC(PN,8,3):FV= SC(PN,9,3):WF= 9:GOSUB 21000
22220 IF FH= 1THEN PLOT 3,55,(12+ PN* 6):PRINT H$:RETURN
22221 IF PH= 10THEN H$= "X"
22222 IF FH= 2THEN PLOT 3,57,(12+ PN* 6):PRINT H$:IF SC(PN,10,2)= 10THEN GOSUB 5000:GOSUB 800:GOSUB 830
22223 IF FH= 3AND (TF(PN,1)+ TF(PN,2)< > 10)AND (TF(PN,2)+ TF(PN,3)= 10)THEN H$= "/"
22224 IF FH= 3THEN PLOT 3,59,(12+ PN* 6):PRINT H$:GOTO 22260
22225 IF SC(PN,10,2)< 10THEN 22260
22240 RETURN
22260 SC(PN,10,3)= SC(PN,10,2)+ SC(PN,9,3):WF= 10:FV= SC(PN,10,3):GOSUB 21000
22270 FH= 4:RETURN
30000 FOR X= 1TO 2:FOR Y= 1TO 10:FOR Z= 1TO 3:PRINT SC(X,Y,Z);:NEXT Z:PRINT :NEXT Y,X
30010 GOTO 30010