100 init 110 randomize 120 pmax=10 130 tnum=3 140 dim map$(20),mx(200),my(200) 150 dim px(pmax),py(pmax),pvx(pmax),pvy(pmax),pt(pmax),pc(pmax) 160 dim ptx(pmax),pty(pmax),ptvx(pmax),ptvy(pmax) 170 dim tx(tnum),ty(tnum),te(tnum) 180 call initmap 190 call initplane 200 call initmine 210 score=0 220 ccount=0 230 cmax=0 240 rem ######################## main 250 label main 260 ccount=ccount+1 270 if ccount>=cmax then 280 ccount=0 290 for i=1 to 200 300 my(i)=my(i)+0.5 310 if my(i)>223 then my(i)=my(i)-320 320 sprpos i,mx(i),my(i),0 330 next i 340 end if 350 call moveplane 360 call movemine 370 locate 25,5 380 print score 430 fsync 1 440 goto *main 450 rem ####################init map 460 sub initmap 470 mmax=20 480 for i=1 to mmax 490 read map$(i) 500 next i 510 k=0 520 yy=208 530 for i=mmax to 1 step -1 540 m$=map$(i) 550 for j=1 to 10 560 k=k+1 570 select case m$(j:j) 580 case "a" 590 sprtex k,7,288,0,320,32 600 case "b" 610 sprtex k,7,320,0,352,32 620 case "c" 630 sprtex k,7,352,0,384,32 640 case "d" 650 sprtex k,7,384,0,416,32 660 case "e" 670 sprtex k,7,416,0,448,32 680 case "f" 690 sprtex k,7,288,32,320,64 700 case "g" 710 sprtex k,7,320,32,352,64 720 case "h" 730 sprtex k,7,352,32,384,64 740 case "i" 750 sprtex k,7,384,32,416,64 760 case "j" 770 sprtex k,7,416,32,448,64 780 case "k" 790 sprtex k,7,320,156,352,188 800 case "l" 810 sprtex k,7,320,156,352,188 820 case "m" 830 sprtex k,7,352,156,384,188 840 case "n" 850 sprtex k,7,384,156,416,188 860 case "o" 870 sprtex k,7,416,156,448,188 880 case "p" 890 sprtex k,7,320,188,352,224 900 case "q" 910 sprtex k,7,352,188,384,224 920 case "r" 930 sprtex k,7,384,188,416,224 940 case "s" 950 sprtex k,7,416,188,448,224 960 case "t" 970 sprtex k,7,320,224,352,256 980 case "u" 990 sprtex k,7,352,224,384,256 1000 case "v" 1010 sprtex k,7,384,224,416,256 1020 case "w" 1030 sprtex k,7,416,224,448,256 1040 end select 1050 mx(k)=j*32 1060 my(k)=yy 1070 sprpos k,mx(k),my(k),0 1080 sprpal k,7,7,1 1090 sprdisp k 1100 next j 1110 yy=yy-16 1120 next i 1130 tilepos 1,0,0,31,223,1000 1140 tilepos 2,352,0,383,223,1000 1150 tilecol 1,0,0,0,128 1160 tilecol 2,0,0,0,128 1170 tiledisp 1 1180 tiledisp 2 1190 end sub 1200 rem ################## initplane 1210 sub initplane 1220 pv0=0.8 1230 for i=1 to pmax 1240 py(i)=-20 1250 pty(i)=-20 1260 next i 1270 end sub 1280 rem ################# plane-move 1290 sub moveplane 1300 i=int(rnd*pmax)+1 1310 if py(i)<=-20 and rnd<0.1 then 1320 pt(i)=int(rnd*5)+1 1330 px(i)=int(rnd*256)+32 1340 py(i)=-16 1350 pvx(i)=0 1360 if rnd<0.1 then pvy(i)=pv0*1.5 else pvy(i)=pv0 1370 pc(i)=0 1380 sn=300+i 1390 sprtex sn,7,64,pt(i)*32,96,pt(i)*32+32 1400 sprpos sn,px(i),py(i),1 1410 sprpal sn,7,0,1 1420 sprdisp sn 1430 ! pv0=pv0+0.01 1440 end if 1450 for i=1 to pmax 1460 if pty(i)>-20 then 1470 ptx(i)=ptx(i)+ptvx(i) 1480 pty(i)=pty(i)+ptvy(i) 1490 nt=300+pmax+i 1500 if ptx(i)<0 or ptx(i)>352 or pty(i)>223 or pty(i)<-16 then 1510 pty(i)=-20 1520 sproff nt 1530 else 1540 sprpos nt,ptx(i),pty(i),1 1550 if ptx(i)>=cx and ptx(i)+32<=cx+64 and pty(i)>=cy and pty(i)+16<=cy+32 and cc=0 then 1560 sproff nt 1570 pty(i)=-20 1580 call startmc 1590 end if 1600 end if 1610 end if 1620 if pc(i)>0 then 1630 pc(i)=pc(i)+1 1640 if mod(pc(i),5)=0 then 1650 call setpc(i) 1660 if pc(i)>30 then 1670 py(i)=-20 1680 sproff 300+i 1690 end if 1700 end if 1710 elseif py(i)>-20 then 1720 px(i)=px(i)+pvx(i) 1730 py(i)=py(i)+pvy(i) 1740 sn=300+i 1750 sprpos sn,px(i),py(i),1 1760 if px(i)+16>=cx and px(i)+16<=cx+64 and py(i)+8>=cy and py(i)+8<=cy+32 and cc=0 then 1770 sproff sn 1780 py(i)=-20 1790 call startmc 1800 end if 1810 if py(i)>223 or px(i)<0 or px(i)>352 then 1820 sproff sn 1830 py(i)=-20 1840 elseif py(i)>50 and rnd<0.01 then 1850 if pvx(i)=0 then 1860 if rnd<0.5 then 1870 pvx(i)=-pvy(i)/2 1880 sprtex sn,7,192,pt(i)*32,224,pt(i)*32+32 1890 else 1900 pvx(i)=pvy(i)/2 1910 sprtex sn,7,224,pt(i)*32,256,pt(i)*32+32 1920 end if 1930 if pty(i)=-20 and rnd<0.5 then call setpt(i) 1940 elseif abs(pvx(i))<1 then 1950 if pvx(i)<0 then 1960 pvx(i)=-pvy(i) 1970 sprtex sn,7,160,pt(i)*32,192,pt(i)*32+32 1980 else 1990 pvx(i)=pvy(i) 2000 sprtex sn,7,256,pt(i)*32,288,pt(i)*32+32 2010 end if 2020 end if 2030 end if 2040 end if 2050 next i 2060 end sub 2070 rem ################## init mine 2080 sub initmine 2090 cx=160 2100 cy=180 2110 cc=0 2120 sprtex 350,8,384,64,448,128 2130 sprpos 350,cx,cy,1000 2140 sprpal 350,8,0,1 2150 sprdisp 350 2160 for i=1 to tnum 2170 tx(i)=-100 2180 ty(i)=300 2190 sprtex 350+i,8,128,0,160,32 2200 sprpal 350+i,8,5,1 2210 next i 2220 end sub 2230 rem ################## move mine 2240 sub movemine 2250 for i=1 to tnum 2260 if ty(i)<300 and te(i)=1 then 2270 ty(i)=ty(i)-4 2280 sprpos 350+i,tx(i),ty(i),999 2290 if ty(i)<-32 then 2300 sproff 350+i 2310 ty(i)=300 2320 else 2330 for j=1 to pmax 2340 if pc(j)=0 and px(j)-16<=tx(i) and px(j)+16>=tx(i) and py(j)-8<=ty(i) and py(j)+8>=ty(i) then 2350 pc(j)=1 2360 call setpc(j) 2370 sprpal 300+j,8,15,1 2380 ty(i)=300 2390 sproff 350+i 2400 score=score+100 2410 pv0=pv0+0.01 2420 seplay 18,100,100 2430 exit for 2440 end if 2450 next j 2460 end if 2470 end if 2480 next i 2490 if cc>0 then !! crush 2500 cc=cc+1 2510 if mod(cc,8)=0 then call setmc 2520 if cc>32 then 2530 sproff 350 2540 end 2550 end if 2560 exit sub 2570 end if 2580 xx=pad(1,14)-127 2590 yy=pad(1,13)-127 2600 if abs(xx)>20 then 2610 cx=cx+xx/50 2620 if cx<32 then cx=32 2630 if cx>288 then cx=288 2640 end if 2650 if abs(yy)>20 then 2660 cy=cy+yy/100 2670 if cy<32 then cy=32 2680 if cy>190 then cy=190 2690 end if 2700 sprpos 350,cx,cy,1000 2710 p1=pad(1,6) 2720 if p1>20 and p0<=20 then 2730 for i=1 to tnum 2740 if ty(i)>=300 then 2750 tx(i)=cx+16 2760 ty(i)=cy 2770 te(i)=1 2780 sprpos 350+i,tx(i),ty(i),999 2790 sprdisp 350+i 2800 seplay 26,100,100 2810 exit for 2820 end if 2830 next i 2840 end if 2850 p0=p1 2860 end sub 2870 rem ################ plane-crush 2880 sub setpc(n) 2890 a1=pc(n)/5+1 2900 if a1<=3 then 2910 x1=256 2920 x2=288 2930 else 2940 x1=288 2950 x2=320 2960 end if 2970 select case a1/3 2980 case 1 2990 y1=180 3000 y2=192 3010 case 2 3020 y1=192 3030 y2=224 3040 case else 3050 y1=224 3060 y2=256 3070 end select 3080 sprtex 300+n,8,x1,y1,x2,y2 3090 end sub 3100 rem ################ plane-tama 3110 sub setpt(n) 3120 xx=cx-px(n)+16 3130 yy=cy-py(n)+8 3140 ptx(n)=px(n) 3150 pty(n)=py(n) 3160 tv=1 3170 if xx=0 then 3180 ptvx(n)=0 3190 if cy>pty(n) then ptvy(n)=tv else ptvy(n)=-tv 3200 else 3210 pd=atn(yy/xx) 3220 vx=tv*cos(pd) 3230 vy=tv*sin(pd) 3240 if cx>px(n) then 3250 ptvx(n)=vx 3260 ptvy(n)=vy 3270 else 3280 ptvx(n)=-vx 3290 ptvy(n)=-vy 3300 end if 3310 end if 3320 nt=300+pmax+n 3330 sprtex nt,8,0,0,32,32 3340 sprpos nt,ptx(n),pty(n),1 3350 sprpal nt,8,5,1 3360 sprdisp nt 3370 end sub 3380 rem ################# mine-crush 3390 sub setmc 3400 if cc<=8 then 3410 x1=320 3420 x2=384 3430 elseif cc<=16 then 3440 x1=384 3450 x2=448 3460 else 3470 x1=448 3480 x2=512 3490 end if 3500 sprtex 350,8,x1,128,x2,192 3510 end sub 3520 rem ################### start-mc 3530 sub startmc 3540 cc=1 3550 call setmc 3560 sprpal 350,8,14,1 3570 seplay 23,150,150 3580 end sub 10000 rem #################### data 10010 data"fffffcbcae" 10020 data"efffffffcb" 10030 data"aededeffff" 10040 data"avwaaaefff" 10050 data"amswaaaeff" 10060 data"amfswaaaef" 10070 data"vrffoaaabf" 10080 data"mffptbcbff" 10090 data"uqfobfffff" 10100 data"amptefffff" 10110 data"autaaeffff" 10120 data"aaaaabffff" 10130 data"aabcaeffff" 10140 data"abfdaaefff" 10150 data"aefcaaaeff" 10160 data"abfdaaabff" 10170 data"bffcbcaeff" 10180 data"fffffdaaef" 10190 data"fffffcaabf" 10200 data"fffffdaaef"