1LOMEM :29000
5NOTRACE
10TEXT:HOME: pi=3.141593/180
20DIM yy(1000), sq(1000), b(1)
30VTAB 8: n$="H O W I T Z E R":GOSUB 9999
35VTAB 12: n$="Downloaded from Compuserve":GOSUB 9999
40VTAB 13: n$="Information Service":GOSUB 9999
45VTAB 15: n$="Revised by J Raymond":GOSUB 9999
50VTAB 16: n$="1985-1986":GOSUB 9999
55VTAB 20: n$="Sound? (y/n)":GOSUB 9999
56GET sound$:IF sound$<>"Y" AND sound$<>"y" AND sound$<>"N" AND sound$<>"n" THEN 56
60FOR x=1 TO 100: sq(x)=(x/10)*(x/10):NEXT x
70HGR:HOME
71VTAB 22: n$="<press any key to begin>":GOSUB 9999: j=PEEK(64885)
73 x=RND(2): r=PEEK(64885)
74 x=COS(221): x=RND(2)
75IF r=j THEN 73
76HOME
80VTAB 21:? "ANGLE: 0"; TAB(11); "WIND: 0"; TAB(20); "ANGLE: 0"
100? SPC(1); "BAGS: 0"; SPC(12); "BAGS: 0"
110HCOLOR =1: np=0
120 p=RND(1)*20+139: hg=RND(1)*70+25
130FOR i=0 TO 1000: yy(i)=p:NEXT i
140FOR i=159 TO p STEP -1:HPLOT 0, i TO 255, i:NEXT i
150FOR i=107 TO 147: hx=SIN(((i-106)*4.5+180)*pi)*hg
160 yy(i)=hx+p
170HPLOT i, hx+p TO i, 159:NEXT i
180 wind=INT(RND(1)*10):IF RND(1)>.5 THEN  wind=-wind
190VTAB 21:HTAB 17:? ABS(wind); :HTAB 0
200HCOLOR =3:IF wind=0 THEN 240
210HPLOT 107, 10 TO 147, 10
220IF wind>0 THEN HPLOT 107, 10 TO 120, 5:HPLOT 107, 10 TO 120, 15:GOTO 240
230HPLOT 147, 10 TO 134, 5:HPLOT 147, 10 TO 134, 15
240 b(0)=RND(1)*15+55-5*ABS(wind)
250 b(1)=RND(1)*15+185+5*ABS(wind)
260FOR i=0 TO 1:FOR j=b(i)-3 TO b(i)+3:HPLOT j, p-5 TO j, p:NEXT j
280HCOLOR =2:NEXT i
290REM   
310VTAB 24:HTAB 0:? SPC(30); :VTAB 24:HTAB 20*np:? "ANGLE?"; :GOSUB 2000: an=z
330IF an<5 OR an>175 THEN GOSUB 1000:GOTO 310
340VTAB 22:INVERSE
350VTAB 21:HTAB 7+19*np:? SPC(4); 
360VTAB 21:HTAB 7+19*np:? an; :HTAB 0
370VTAB 24:HTAB 0:? SPC(30); :VTAB 24:HTAB 20*np:? "BAGS?"; :GOSUB 2000: bg=z
380IF bg<1 OR bg>40 OR bg<>INT(bg) THEN GOSUB 1000:GOTO 370
390VTAB 22:INVERSE
400VTAB 22:HTAB 7+19*np:? SPC(6); 
410VTAB 22:HTAB 7+19*np:? bg; :HTAB 0
420VTAB 23:HTAB 0:? SPC(30); 
425ON (sound$="N") OR (sound$="n") GOTO 430: duration=5: inc=0:GOSUB 10000
430 bg=bg*10:IF np=1 THEN  an=an+180
440 py=p-5: px=b(np): iv=0
450 iv=iv+1
460 x=bg*iv*COS(an*pi)/10+b(np)-wind*sq(iv)
470 y=bg*iv*SIN(an*pi)/10: y=p+(np-( NOT np))*y+16*sq(iv)
490IF y>p+7 THEN 510
500IF x>b(np)-5 AND x<b(np)+5 THEN 570
510 ym=(ABS(py-y)/((ABS(px-x))+1E-04))*SGN(y-py)
520 st=SGN(x-px): rn=x-px: cc=0
530IF n=1 THEN  cc=rn: rn=0: st=-st
540 l=px+cc: m=py+ym*ABS(cc)
550IF yy(ABS(l))<m THEN 610
560 cc=cc+st:IF ABS(cc-rn)>ABS(st) THEN 540
570ON (x>254) OR (x<0) OR (y<0) GOTO 580:FOR cv=1 TO 7:HCOLOR =3:HPLOT x, y:NEXT:HCOLOR =0:HPLOT x, y
580 px=x: py=y
590IF yy(ABS(x))<y THEN  l=ABS(x): m=yy(ABS(x)):GOTO 610
600GOTO 450
610IF ABS(x-b(0))<5 OR ABS(x-b(1))<5 THEN 660
620IF x<3 OR x>254 OR y<0 THEN 650
630HCOLOR =0:FOR i=1 TO 25: bx=l-2+RND(1)*4: by=m+RND(1)*2:HPLOT bx, by
640ON (sound$="N") OR (sound$="n") GOTO 650: duration=100: inc=-1:GOSUB 10000
650 np=1-np:GOTO 290
660HCOLOR =3:FOR i=x-10 TO x+10 STEP 2:HPLOT ABS(i), p-(RND(1)*10) TO x, p:NEXT i
665ON (sound$="N") OR (sound$="n") GOTO 670: duration=200: inc=0:GOSUB 10000
670VTAB 23:? SPC(6); "Another game? (y/n) "; 
680GET a$:IF a$<>"Y" AND a$<>"y" AND a$<>"n" AND a$<>"N" THEN 680
690IF a$="Y" OR a$="y" THEN 70
700TEXT:HOME:END
1000VTAB 23:HTAB 0:? CHR$(7); SPC(10); "BAD VALUE!"; SPC(10); :FOR dl=1 TO 1000:NEXT dl:RETURN
2000 c=1: l$="0"
2010GET a$: a=ASC(a$)
2020IF a=13 THEN  z=INT(VAL(l$)*10)/10:RETURN
2030IF a>45 AND a<58 AND a<>47 AND c<6 THEN  l$=l$+a$: c=c+1:? a$; :GOTO 2010
2040IF a<>163 THEN 2010
2050IF c=1 THEN  l$="0":GOTO 2010
2060 l$=LEFT$(l$, LEN(l$)-1): c=c-1:? a$; :GOTO 2010
9999HTAB (15-(LEN(n$)/2)):? n$:RETURN
10000REM  explosion sound routine
10010GOSUB 10100:REM  init sound values
10020POKE chip%, 228:CALL sound%
10030FOR loud=240+inc TO 255
10040POKE chip%, loud:CALL sound%
10050FOR delay=1 TO duration:NEXT
10060NEXT loud
10070RETURN
10100DATA  58,102,109,211,255,201
10110 sound%=28000
10120 chip%=28006
10130FOR address=sound% TO sound%+5
10140READ byte%
10150POKE address, byte%
10160NEXT address
10170RESTORE
10180RETURN
