for PB-100F+OR-1、PB-120

Programmed by NUAO  2024/5/20

あなたはアテーナイの英雄テーセウス。脱出不可能といわれるクノッソスの迷宮ラビュリントスの中央広場で牛頭人身の怪物ミノタウロスを倒し、今まさにここから脱出しようとしています。あちこちで迷宮が崩れつつあるなか、無事出口に辿り着けるでしょうか…。

注意

はじめに

プログラムを入力又はロードします。プログラム・サイズは1,568stepsです。

Shift+[1]でゲーム開始です。中断後の再開はREADY P1においてRUN 10[EXE]です。

★注意★ PB-120の場合は[P1]の5行目を「B=347」に変更してください。

遊び方

3D表示されたクノッソスの迷宮ラビュリントス中央広場からスタートします。

操作はターン制です。

[5]キーを押すと一歩前進します。[1]←→[3]キーを押すと左右に向きを変えます。

[Z]キーを押すと一歩前の壁やガレキを破壊して通れるようにします。


3D表示について

迷宮は壁で構成されています。壁の状態と3D表示の対応は次の通り。

3D表示例

注意

壁を破壊!

通れるようになったが…

近くで崩落が発生!

崩落で生き埋めになってしまった。

GameOver.

迷宮から脱出成功!

Knossos説明書.pdf

(参考)KnossoSプログラムのメモリ格納状況

MemoryStore.pdf

プログラム・リスト(PB-SIM形式)

※PB-SIM形式ですが実機へのダウンロード用であり、PB-SIMでは実行できません。


<注意!>PB-120では[P1]の5行目を以下に変更してください。

[P1] 5 VAC:X=8:Y=6:V=1:B=347:MODE 4:PRINT "KnossoS"


[P0]

1 GOTO 30

10 $="22111132221301321232":RETURN

11 $="32131202210212112232":RETURN

12 $="22030331032220122112":RETURN

13 $="12120111303322132011":RETURN

14 $="21132000000021121312":RETURN

15 $="00113000010020111022":RETURN

16 $="31202000030021313311":RETURN

17 $="11133000000011000202":RETURN

18 $="11111111011312233131":RETURN

19 $="10112123232112113201":RETURN

20 $="31211210110203011133":RETURN

21 $="12013022012130330111":RETURN

22 $="12211323030302013212":RETURN

23 $="22321222332232213222":RETURN

24 $="20013211203003103133":RETURN

30 IF E<0;E=E+20

35 IF E>19;E=E-20

40 IF F<0;F=F+15

45 IF F>14;F=F-15

50 S=E:IF G<0;S=S-1:IF S<0;S=19

55 T=F:IF H<0;T=T-1:IF T<0;T=14

60 GOSUB T+10:D$=MID(S+1,1):M=VAL(D$)

65 IF C=1 THEN 80

70 IF G=0;M=SGN FRAC(M/2:RETURN

75 M=INT(M/2:RETURN

80 C=0:IF G=0;M=M+SGN(.2-FRAC(M/2:GOTO 90

85 M=M-2*SGN(M-1.5

90 MODE 19(B+S+T*29,M+16):RETURN


[P1]

5 VAC:X=8:Y=6:V=1:B=283:MODE 4:PRINT "KnossoS"

10 GOSUB #3:IF X*Y=234;PRINT:PRINT "Exit!":END

20 I$=KEY:IF I$="" THEN 20

25 PRINT CSR5;"    ";:IF I$<>"5" THEN 35

30 E=X:F=Y:G=V:H=W:GOSUB #0:IF M=0;X=E+V:Y=F+W

35 IF I$="1";K=V:V=W:W=-K

40 IF I$="3";K=V:V=-W:W=K

45 IF I$="Z";GOSUB #2

50 GOTO 10


[P2]

10 E=X:F=Y:G=V:H=W:GOSUB #0:IF M=0;RETURN

15 U=U+1:PRINT CSR2;"/";:C=1:GOSUB #0

20 PRINT CSR1;"o/o";:GOSUB #4:PRINT CSR1;"_/_";

25 GOSUB #4:FOR L=1 TO U

30 E=X-3+INT(RAN#*7:F=Y-3+INT(RAN#*7

35 K=90*INT(RAN#*4:G=COS K:H=SIN K

40 GOSUB #0:IF M=1 THEN 30

45 $="\DGo.\DGo":FOR J=1 TO 3:GOSUB #4

50 PRINT CSR1;MID(J,3);:NEXT J

55 C=1:GOSUB #0:NEXT L:IF U=4;PRINT:PRINT "Die.":END

60 RETURN


[P3]

1 E=X+W:F=Y-V:G=-W:H=V:GOSUB #0:IF M=1;N$=")":GOTO 3

2 G=V:H=W:GOSUB #0:N$=" ":IF M=1;N$="]"

3 E=X+V:F=Y+W:G=-V:H=-W:GOSUB #0

4 IF M=1;O$="O":P$=O$:Q$=O$:GOTO 8

5 G=W:H=-V:GOSUB #0:O$=" ":IF M=1;O$=">"

6 G=V:H=W:GOSUB #0:P$=" ":IF M=1;P$="\SQ"

7 G=-W:H=V:GOSUB #0:Q$=" ":IF M=1;Q$="<"

8 E=X-W:F=Y+V:G=W:H=-V:GOSUB #0:IF M=1;R$="(":GOTO 10

9 G=V:H=W:GOSUB #0:R$=" ":IF M=1;R$="["

10 PRINT:PRINT N$+O$+P$+Q$+R$;

11 $="^\LA\DA\RA":PRINT MID(1+2*V*V+W*W+V+W,1);

12 A=ABS(X-18:IF A>10;A=20-A

13 Z=ABS(Y-13:IF Z>7;Z=15-Z

14 PRINT INT SQR(A*A+Z*Z;:RETURN


[P4]

1 K=SIN SIN SIN 1:RETURN


プログラム・リスト(実機形式)

<注意!>PB-120では[P1]の5行目を以下に変更してください。

[P1] 5 VAC:X=8:Y=6:V=1:B=347:MODE 4:PRINT "KnossoS"

あとがき

ENEMY」開発過程でできちゃった「壁モデル」の迷路システムをゲームに仕立てました。「The MAZE」や「ENEMY」は通路も壁も各1セルを占有する「ブロックモデル」ですが、「壁モデル」なら壁がセルを占有しないため広大なマップを扱うことができます。

とはいえ、PB-100BASICでは迷路マップのような大きなデータは$変数で扱わざるを得ないため、マップデータの変更を伴う実装にはMODE19の変則技を利用する必要がありました。MODE18(PEEK),MODE19(POKE)の存在と利用方法を発見して下さった先人の方々に、心より御礼申し上げます。

クノッソスの宮殿・ラビュリントス遺跡に一度は行ってみたいけど、クレタ島って遠いなぁ…。