#2:RECON1

(published: Sep. 13, 2000)

ACTIVE BASICにはゲームを作るときに便利な、 画面上に書かれた文字を読む機能 が無いので、結構不便です。 それを何とかカバーできないかと考えながら作ったゲームがこれです。

ダウンロード(zip形式, 75.2KB)

ゲーム内容

"#"を動かして敵に見つからないように "*"を取って下さい。 見つかるとゲームオーバーで、 "*"を取った数が表示されます。

操作方法

カーソルキー:8方向移動

ヒント1

壁を挟んでいれば敵には見つかりません。

ヒント2

敵の向きに注意してください。

壁を挟まずに並んでも、敵が"#"の方向を向いていなければ 見つかることはありません。

ソース紹介

1 randomize
5 dim h%(10),v%(10),q%(10),m%(16,16)
10 cls
12 for l1%=0 to 16
14  for l2%=0 to 16
16   m%(l1%,l2%)=0
18  next l2%
20 next l1%
21 x%=15:y%=15:s%=0:f%=0:g%=0
22 for l%=0 to 16
24  locate l%, 0:print "H";:m%(l%, 0)=1
26  locate l%,16:print "H";:m%(l%,16)=1
28  locate  0,l%:print "H";:m%( 0,l%)=1
30  locate 16,l%:print "H";:m%(16,l%)=1
32 next l%
34 for l1%=2 to 14 step 2
36  for l2%=2 to 14 step 2
38   locate l1%,l2%:print "H";:m%(l1%,l2%)=1
40  next l2%
42 next l1%
44 for l%=1 to 10
46  h%(l%)=1:v%(l%)=1:q%(l%)=1
48 next l%
50 locate 18,1:print "recon 1"
52 locate 18,2:print "[cursor]: move"
54 locate 18,4:print "by Nisino Tatami"
56 locate 18,6:print "push [spc]"
58 i$=inkey$:if i$<>" " then 58
60 locate 18,6:print "          "
90 gosub 400
100 x0%=0:y0%=0
110 if keystate(28)<0 then x0%= 1
115 if keystate(29)<0 then x0%=-1
120 if keystate(31)<0 then y0%= 1
125 if keystate(30)<0 then y0%=-1
126 if m%(x%+x0%,y%+y0%)<>1 then 130
127 if m%(x%+x0%,y%    )<>1 then y0%=0:goto 130
128 if m%(x%    ,y%+y0%)<>1 then x0%=0:goto 130
129 x0%=0:y0%=0
130 locate x%+x0%,y%+y0%:print "#";
140 if x0%<>0 or y0%<>0 then locate x%,y%:print " ";
150 x%=x%+x0%:y%=y%+y0%
152 if m%(x%,y%)=0 then 160
154 m%(x%,y%)=0:s%=s%+1
156 gosub 400
160 for l%=1 to 4
170 d%=int(rnd(1)*5)+1:h0%=0:v0%=0
175 on d% goto 180,185,190,195,200
180 if m%(h%(l%)+1,v%(l%)  )<>1 and q%(l%)<>2 then h0%= 1:q%(l%)=1
182 goto 200
185 if m%(h%(l%)-1,v%(l%)  )<>1 and q%(l%)<>1 then h0%=-1:q%(l%)=2
187 goto 200
190 if m%(h%(l%)  ,v%(l%)+1)<>1 and q%(l%)<>4 then v0%= 1:q%(l%)=3
192 goto 200
195 if m%(h%(l%)  ,v%(l%)-1)<>1 and q%(l%)<>3 then v0%=-1:q%(l%)=4
200 locate h%(l%)+h0%,v%(l%)+v0%:print mid$("><VA",q%(l%),1);
210 if h0%<>0 or v0%<>0 then locate h%(l%),v%(l%):print mid$(" #*",m%(h%(l%),v%(l%))+1,1);
220 h%(l%)=h%(l%)+h0%:v%(l%)=v%(l%)+v0%
230 if h%(l%)<>x% or csng(x%)/2=int(csng(x%)/2) then 235
231 if q%(l%)=3 and v%(l%)<y% then f%=1:g%=l%
232 if q%(l%)=4 and v%(l%)>y% then f%=2:g%=l%
235 if v%(l%)<>y% or csng(y%)/2=int(csng(y%)/2) then 240
236 if q%(l%)=1 and h%(l%)<x% then f%=3:g%=l%
237 if q%(l%)=2 and h%(l%)>x% then f%=4:g%=l%
240 next l%
260 if f%=0 then 100
261 for l%=1 to 15
262  on f% goto 263,265,267,269
263  if v%(g%)+l%<16 then locate h%(g%)   ,v%(g%)+l%:print "|";
264  goto 270
265  if v%(g%)-l%> 0 then locate h%(g%)   ,v%(g%)-l%:print "|";
266  goto 270
267  if h%(g%)+l%<16 then locate h%(g%)+l%,v%(g%)   :print "-";
268  goto 270
269  if h%(g%)-l%> 0 then locate h%(g%)-l%,v%(g%)   :print "-";
270 next l%
275 locate 0,0:print "score ";s%;" "
280 locate 10,10:print "retr[y]/e[n]d"
290 i$=inkey$
300 if i$="y" then 10
310 if i$<>"n" then 290
320 end
400 p%=int(rnd(1)*6)*2+3:q%=int(rnd(1)*6)*2+3
410 m%(p%,q%)=2
420 for l%=1 to 4
422  if h%(l%)=p% and v%(l%)=q% then h%(l%)=1:v%(l%)=1
424 next l%
426 locate p%,q%:print "*";
450 return

([D]iscoversoft) (H-man in [A]CTIVE BASICトップ) (総合索引[t])


H-man AND NOW
作:Nishino Tatami (ainosato@vc-net.ne.jp)