(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