The MAZE

 壁延ばし法で自動生成された迷路から3Dビューで脱出します。

 Pokecom GO(fast モード)、PB-SIM(高速モード)、PB-100+拡張メモリ(遅い) に対応しています。

遊び方

 [P0]を実行してください。 

迷路は外周に囲まれた正方形で、最小 5×5 から最大 15×15 マスで、奇数のみです(通路、壁は各一マス) 

迷路の一辺のサイズを訊いてきますので、5~15 の間で入力してください。 “WAIT”と表示され、ランダムに迷路を生成します。(PB-100 実機だと 15×15 で 4 分以上)

 迷路生成が終わると、ランダムな位置から開始となり、3D ビューが表示されます 。

表示例

操作方法

“5”で前へ進み、”1”←→”3”で左右を向きます。

”2”で後ろに振り向きます(回れ右)。

 右側に、向いている方向と、座標(→X 軸、↓Y 軸)を表示します。

 ゴール(出口)は外周のどこかにあります。その前に立ち、外周の壁の方を向くと「Ω」が表示されクリアとなります。

クリア後も迷路探索を続行できます。終了するときは STOP を押して下さい。 


注意

[P6]はゲーム上は入力不要ですが、迷路作成後に STOP し、実行すれば迷路メモリの内容を表示します。 

その後、[P1]を実行することにより、ゲームを再開できます 

プログラムの解説

the maze 説明書 R5.pdf

[P0]

30 VAC

40 $="^\LA\DA\RA"

50 INPUT "\SQ5,7..15",L:IF L>4;IF L<16 THEN 70

60 GOTO 50

70 L=1+2*INT(L/2:PRINT "WAIT";

80 GOSUB #3

90 GOSUB 140:GOSUB #4:IF Z=0 THEN 90

100 E=X:F=Y:G=0:H=1

110 GOSUB 140:IF X>2;IF X<L-1;IF Y>2;IF Y<L-1 THEN 110

120 GOSUB #4:IF Z=0 THEN 110

130 C=X:D=Y:GOTO #1

140 X=2+INT(RAN#*(L-2):Y=2+INT(RAN#*(L-2):RETURN


[P1]

10 X=E+H:Y=F-G:GOSUB #4:IF Z=0;PRINT CSR 0;")";:GOTO 30

20 PRINT CSR 0;"]";

30 X=E+G:Y=F+H:GOSUB #4:IF Z=0;PRINT "OOO";:GOTO 100

40 X=E+G+H:Y=F-G+H:GOSUB #4:IF Z=0;PRINT ">";:GOTO 60

50 PRINT "\SQ";

60 X=E+2*G:Y=F+2*H:GOSUB #4:IF Z=0;PRINT "\SQ";:GOTO 80

70 PRINT "\CR";

80 X=E+G-H:Y=F+G+H:GOSUB #4:IF Z=0;PRINT "<";:GOTO 100

90 PRINT "\SQ";

100 X=E-H:Y=F+G:GOSUB #4:IF Z=0;PRINT "(";:GOTO 120

110 PRINT "[";

120 PRINT MID(1+2*G^2+H^2+G+H,1);"      ";CSR 6;E;F;

130 IF E=C;IF F=D THEN 150

140 GOTO 170

150 A=E+G-1:A=A*(E+G-L):A=A*(F+H-1):A=A*(F+H-L)

160 IF A=0;PRINT CSR 2;"\OM";CSR 6;"CLEAR!";

170 B$=KEY:IF B$="" THEN 170

180 IF B$="5";X=E+G:Y=F+H:GOSUB #4:IF Z=1;E=X:F=Y

190 IF B$="1";K=G:G=H:H=-K

200 IF B$="3";K=G:G=-H:H=K

210 IF B$="2";G=-G:H=-H

220 GOTO 10


[P3]

10 Z=1:FOR Y=2 TO L-1:FOR X=2 TO L-1:GOSUB #5:NEXT X:NEXT Y

40 J=3:FOR I=1 TO L*2

50 E=1+(L-1)*INT(RAN#*2:F=1+2*INT(RAN#*L/2

60 IF RAN#>.5;A=E:E=F:F=A

70 GOSUB 130:NEXT I

80 J=5:FOR I=0 TO INT(L/4:FOR C=I*2 TO L-I*2-3 STEP 2

85 E=I*2+1:F=C+1:GOSUB 120:E=C+1:F=L-I*2:GOSUB 120

90 E=L-I*2:F=L-C:GOSUB 120:E=L-C:F=I*2+1:GOSUB 120

95 NEXT C:NEXT I

110 RETURN

120 X=E:Y=F:GOSUB #4:IF Z=1;RETURN

130 K=0

140 H=0:G=INT(RAN#*3)-1:IF G=0;H=INT(RAN#*2)*2-1

150 A=G:G=H:H=-A:K=K+1:IF K=J;RETURN

160 X=E+G:Y=F+H

180 GOSUB #4:IF Z=0 THEN 150

190 X=E+G*2:Y=F+H*2:GOSUB #4:IF Z=0 THEN 150

200 Z=0:GOSUB #5:X=E+G:Y=F+H:GOSUB #5

210 E=X+G:F=Y+H:GOTO 130


[P4]

2 N=2^(FRAC(Y/2)*34+X:M=O(Y/2)

4 Z=INT(M/N)-2*INT(M/2/N:RETURN


[P5]

2 N=2^(FRAC(Y/2)*34+X:M=O(Y/2)

4 M=N*(Z+INT(M/N/2)*2+M/N-INT(M/N))

6 A=-1:O(Y/2)=RND(M,A):RETURN


迷路ダンププログラム(任意)

[P6]

5 PRINT 

10 FOR I=1 TO L

15 FOR J=1 TO L

20 X=J:Y=I: GOSUB #4

30 IF Z=0;PRINT "#";:GOTO 70

40 PRINT ".";

70 NEXT J

80 PRINT "": PRINT 

90 NEXT I

100 END


実機形式