10 REM
20 ENV 1,1,15,1,15,-1,1
30 GOSUB 590
40 HS=0
50 BL=7
60 BA$="":FOR L=1 TO BL:BA$=BA$+CHR$(132):NEXT L:BA$=" "+BA$+" "
70 BE=31-BL
80 GOSUB 450
90 REM MAIN NEW GAME LOOP
100 SC=0
110 REM MAIN NEW FRAME LOOP
120 BH=90
130 GOSUB 360
140 BX=10:GOSUB 540
150 X=5:Y=20
160 CX=1:CY=-1
170 GF=1
180 REM MAIN BOUNCE AND SCORE LOOP
190 GOSUB 750
200 IF GF=0 THEN GOTO 1000
210 GOSUB 920
220 GOSUB 960
230 PEN 3
240 LOCATE 8,1:PRINT SC;
250 IF BH<>0 THEN GOTO 190
260 REM END OF FRAME
270 FOR L=10 TO 250 STEP 5
280 SOUND 1,L,5:SOUND 2,L+7,4
290 NEXT L
300 MODE 1:LOCATE 4,11
310 PRINT "Your score is now :";SC
320 IF SC>HS THEN PRINT "You have the high score":PRINT:PRINT"and you're still playing":GOTO 340
330 PRINT "You are ";hs-sc;" points behind the high score"
340 FOR L=1 TO 4000:NEXT L
350 GOTO 110
360 REM Draw screen layout
370 MODE 1:BORDER 14:PAPER 0:PEN 2
380 FOR L=2 TO 22
390 LOCATE 1,L:PRINT CHR$(129):LOCATE 32,L:PRINT CHR$(130);:NEXT L
400 LOCATE 2,2:FOR L=2 TO 31:PRINT CHR$(134);:NEXT L
410 FOR L=2 TO 31:PEN 3:LOCATE L,6:PRINT CHR$(133);:LOCATE L,13:PRINT CHR$(133);
420 PEN 1:LOCATE L,9:PRINT CHR$(133);:NEXT L
430 LOCATE 2,1:PRINT "SCORE:         HIGH : ";HS
440 RETURN
450 REM GENERATE THE PATTERNS
460 SYMBOL AFTER 129
470 SYMBOL 129,4,2,1,2,4,2,1,2
480 SYMBOL 130,32,64,128,64,32,64,128,64
490 SYMBOL 131,24,62,126,255,255,126,62,24
500 SYMBOL 132,255,255,170,85,72,16,0,0
510 SYMBOL 133,255,170,85,170,85,170,85,255
520 SYMBOL 134,0,0,0,0,0,0,0,255
530 RETURN
540 REM DRAW BAT ON SCREEN
550 LOCATE BX,23
560 PEN 3
570 PRINT BA$;
580 RETURN
590 MC=40000
600 TA=40000+&7F
610 TH=INT(TA/256)
620 TL=TA-256*TH
630 POKE MC,&CD
640 POKE MC+1,&60
650 POKE MC+2,&BB
660 POKE MC+3,&32
670 POKE MC+4,TL
680 POKE MC+5,TH
690 POKE MC+6,&C9
700 RETURN
710 LOCATE XX,YY
720 CALL MC
730 DD=PEEK(TA)
740 RETURN
750 REM SET UP NEW BALL POSITION
760 REM CHANGE SCORE IF APPROPRIATE
770 C=X+CX:D=Y+CY
780 IF C<2 OR C>30 THEN CX=-CX:SC=SC+2:GOTO 770
790 IF D<3 THEN CY=-CY:SC=SC+4:CX=INT(RND(1)*3)-1:GOTO 770
800 IF D>23 THEN GF=0:RETURN
810 XX=C+1:YY=D+1:GOSUB 710
820 IF DD=32 THEN RETURN
830 SOUND 1,280,20,0,1
840 IF DD=132 THEN GOTO 880
850 BH=BH-1
860 SC=SC+D:LOCATE XX,YY:PRINT " ";
870 CX=INT(RND(1)*3)-1:CY=-CY:GOTO 770
880 SC=SC+20:CY=-CY
890 CX=INT(RND(1)*3)-1
900 GOTO 770
910 RETURN
920 REM ERASE OLD BALL, PLOT NEW BALL
930 LOCATE C+1,D+1:PRINT CHR$(131);:LOCATE X+1,Y+1:PRINT " "
940 X=C:Y=D
950 RETURN
960 REM MOVE BAT IF NECESSARY
970 IF INKEY(8)=0 AND BX>1 THEN BX=BX-1:GOSUB 540
980 IF INKEY(1)=0 AND BX<BE THEN BX=BX+1:GOSUB 540
990 RETURN
1000 REM PLAYER HAS LOST THE BALL
1010 CLS:LOCATE 1,10:PRINT "GAME OVER"
1020 LOCATE 1,15:PEN 2:PRINT "YOU SCORED :";SC
1030 IF SC>HS THEN LOCATE 1,18:PRINT "WHICH IS THE HIGH SCORE":HS=SC:GOTO 1050
1040 LOCATE 1,18:PRINT "SLIGHTLY (";HS-SC;") less than ":LOCATE 1,20:PRINT "the high score"
1050 LOCATE 1,21:PRINT "DO YOU WANT TO PLAY AGAIN ":LOCATE 15,23:PRINT "(Y/N)"
1060 I$=UPPER$(INKEY$)
1070 IF I$<>"Y" AND I$<>"N" THEN GOTO 1060
1080 IF I$="Y" THEN GOTO 100
1090 MODE 1:LOCATE 11,11:PRINT "type RUN to restart"
1100 END