(published: Apr. 10, 2001)
外部ビットマップの取りこみを今回初めて試してみました。 あと画像のマスキング処理も行っています。
人型宇宙船を動かして球型小惑星に当たらない様に避けつづけて下さい。 当たるとゲームオーバーで、 避けつづけていた時間が表示されます。
球型小惑星の前身であるX型小惑星は触れてもミスにはなりません。
画像ファイルは実行ファイルと同じディレクトリに置かなければなりません。 変にファイルを動かしたりしないこと。
1 randomize 2 dim x(70),y(70),x0(70),y0(70),c%(70),t%(70),bg(70) 3 pi=atn(1)*4: 4 bload "blg.bmp",blg:bload "blg0.bmp",blg0 5 bload "shp.bmp",shp:bload "shp0.bmp",shp0 6 bload "pre.bmp",pre:bload "pre0.bmp",pre0 7 bload "bxn.bmp",bxn:bload "bxn0.bmp",bxn0 9 get@(x%,y%)-(x%+15,y%+15),bg 10 cls 3 12 x%=0:y%=0:bg=0:s%=-1:f%=0:st%=1 19 get@(x%,y%)-(x%+15,y%+15),bg 20 for l%=0 to 70 21 gosub 1000 25 next l% 78 locate 53,2:print "blg0" 80 locate 53,3:print "[cursor]: move" 82 locate 53,4:print "[z][x][v]: speed up" 84 locate 53,5:print "by Nisino Tatami" 86 locate 53,7:print "push [spc]" 90 i$=inkey$:if i$<>" " then 90 92 locate 53,7:print " " 100 x0%=0:y0%=0:k0%=0:st%=1 105 put@(x%,y%),bg,and 106 if keystate(asc("Z"))<0 then st%=st%+2 107 if keystate(asc("X"))<0 then st%=st%+4 108 if keystate(asc("V"))<0 then st%=st%+8 110 if keystate(28)<0 then x0%=st%:k0%=1 115 if keystate(29)<0 then x0%=-st%:k0%=1 120 if keystate(31)<0 then y0%=st%:k0%=1 125 if keystate(30)<0 then y0%=-st%:k0%=1 150 x%=x%+x0%:y%=y%+y0% 151 if x%<0 then x%=0 152 if x%>399 then x%=399 153 if y%<0 then y%=0 154 if y%>399 then y%=399 161 get@(x%,y%)-(x%+15,y%+15),bg 162 put@(x%,y%),shp0,and 163 put@(x%,y%),shp,or 500 for l%=0 to 70 510 put@(x(l%),y(l%)),bg(l%),and 515 if t%(l%)>0 then gosub 2000:goto 540 520 x(l%)=x(l%)+x0(l%):y(l%)=y(l%)+y0(l%) 521 if abs(x(l%)-x%)<8 and abs(y(l%)-y%)<8 then f%=1 530 if x(l%)<0 or x(l%)>399 or y(l%)<0 or y(l%)>399 then gosub 1000 531 get@(x(l%),y(l%))-(x(l%)+15,y(l%)+15),bg(l%) 532 put@(x(l%),y(l%)),blg0,and 533 put@(x(l%),y(l%)),blg,or 540 next l% 545 s%=s%+1 550 if f%=0 then 100 600 for l%=1 to 100 602 x0=x%:y0=y% 604 v=rnd(1)*pi*2 606 x1=cos(v)*12:y1=sin(v)*12 632 put@(x0,y0),bxn0,and 633 put@(x0,y0),bxn,or 636 x0=x0+x1:y0=y0+y1 640 if x0>=0 and x0<=399 and y0>=0 and y0<=399 then 632 699 next l% 700 locate 53,7:print "score ";s%;" " 710 locate 53,9:print "retr[y]/e[n]d" 720 i$=inkey$ 730 if i$="y" then 10 740 if i$<>"n" then 720 750 end 1000 x(l%)=rnd(1)*400:y(l%)=rnd(1)*400 1010 v=rnd(1)*pi*2 1020 x0(l%)=cos(v)*12:y0(l%)=sin(v)*12 1026 get@(x(l%),y(l%))-(x(l%)+15,y(l%)+15),bg(l%) 1027 t%(l%)=int(rnd(1)*1000)-s%:if t%(l%)<5 then t%(l%)=5 1030 return 2000 t%(l%)=t%(l%)-1 2010 get@(x(l%),y(l%))-(x(l%)+15,y(l%)+15),bg(l%) 2020 put@(x(l%),y(l%)),pre0,and 2030 put@(x(l%),y(l%)),pre,or 2040 return