ドルアーガ マップジェネレータ

【VRC7/MMC5 BASIC専用】

 

FC版ドルアーガの塔の迷路生成をファミリーベーシックで再現するプログラム
ステージ数を種に各ステージのマップを生成しその過程を表示します。
このプログラムを実行する前に、こちらのPCG定義プログラムを実行してください。

1130行のコメントアウトを解除することで任意の面を選択して見ることができます。

 

 

 

10 '#######################
20 '#                     #
30 '# THE TOWER OF DRUAGA #
40 '#                     #
50 '#    MAP GENERATOR    #
60 '#                     #
70 '#    MAIN  PROGRAM    #
80 '#                     #
90 '#######################
1000 '== ショキセッテイ  ==
1110 CLEAR (&H7F00-1)
1120 MO=0:FL=1
1130 'MO=1:INPUT"FLOOR";FL
1140 SZ=6:S2=(SZ+1)*16:S1=S2-1:S3=(SZ+2)*16-1
1150 PALETB 0,15,48,22,6:PALETB 1,15,16,17,6
1160 GOSUB 6000
1170 GOSUB 6300
1200 '== リョウイキ  リセット  ==
1210 FOR I=0 TO 127:POKE (&H7F00+I),0:NEXT
1220 FL$=STR$(FL):IF LEN(FL$)=2 THEN FL$=" 0"+RIGHT$(FL$,1)
1230 LOCATE 16,5:PRINT FL$
1300 '== ランスウ  ジュンビ  ==
1310 T1=((FL*2) AND 255)+FL
1320 T2=(T1 AND 255)+(T1/256)+3
1330 S2=(T2 AND 255)
1340 S1=(S2+(T2/256)+2) AND 255
1400 '== カイシイチ  シテイ  ==
1410 CP=16
1420 GOSUB 5000:GOTO 1600
1500 '== カベ  カクテイ  ==
1510 IF SK=0 GOSUB 2600
1520 SK=0
1600 '== サクセイズミ? ==
1610 SP=CP
1620 IF PEEK(&H7F00+CP) <> 0 THEN SK=1:GOTO 2200
1700 '== チェック  ==
1710 '== ゲンザイチガ  ガイヘキ? ==
1720 IF (CP AND 15) = 15  THEN SK=1:GOTO 2200
1730 '== ウエノハシラ  カクニン  ==
1740 IF (PEEK(&H7F00+CP-16) AND 240) = 0 GOTO 2000
1750 '== シタノハシラ  カクニン  ==
1760 IF (PEEK(&H7F00+CP+16) AND 240) = 0 GOTO 2000
1770 '== ヒダリノハシラ  カクニン  ==
1780 IF (PEEK(&H7F00+CP-1) AND 240) = 0 GOTO 2000
1790 '== ミギノハシラ  カクニン  ==
1800 IF (PEEK(&H7F00+CP+1) AND 240) <> 0 GOTO 2200
2000 '== カベ  サクセイ  ==
2010 OK=0:GOSUB 9000
2020 ON (A AND 3)+1 GOSUB 8000,8100,8200,8300
2030 IF (PEEK(&H7F00+NP) AND 240) = 0 OK=1
2040 IF OK=0 GOTO 2000
2050 CK=PEEK(&H7F00+NP)
2060 POKE (&H7F00+CP),(PEEK(&H7F00+CP) OR W1)
2070 GOSUB 7500
2080 POKE (&H7F00+NP),(PEEK(&H7F00+NP) OR W2)
2090 GOSUB 7000
2100 BP=CP:CP=NP
2110 IF CK <> 0 GOTO 2200
2120 IF (CP AND 15) = 15 GOTO 2200
2130 IF CP >= 112 GOTO 2200
2140 IF CP >= 16 GOTO 1700
2200 '== ツギノハシラ  ==
2210 CP=SP+1
2220 IF CP <> 112 GOTO 1500
2300 '== 60メン センヨウショリ  ==
2310 IF FL<>60 GOTO 2500
2320 FOR J=0 TO 127
2330   POKE (&H7F00+J),10
2340 NEXT
2350 FOR J=14 TO 126 STEP 16
2360   POKE (&H7F00+J),8
2370   POKE (&H7F00+J+1),2
2380 NEXT
2390 GOSUB 5000
2500 '== ツギノ  フロア  ヘ  ==
2510 PLAY"T3Y0M1V5O3#G3G1F#DF7":SK=0
2520 IF MO=1 THEN LOCATE 0,22:END
2530 FL=FL+1:IF FL>60 FL=1
2540 GOTO 1200
2600 '== カベ  カクテイ  ==
2610 FOR I=0 TO 127
2620   POKE (&H7F00+I),(PEEK(&H7F00+I) AND 15)
2630 NEXT
2640 GOSUB 5000
2650 RETURN
5000 '== ヒョウジ  ==
5010 P0$="":FOR I=0 TO 14:P0$=P0$+CHR$((PEEK(&H7F00+I) AND 4) OR 226):NEXT
5020 P0$=CHR$(233)+P0$+CHR$(234)
5030 P1$="":FOR I=16 TO 30:P1$=P1$+CHR$(PEEK(&H7F00+I) OR 192):NEXT
5040 P1$=CHR$((PEEK(&H7F00+15) AND 2) OR 225)+P1$+CHR$((PEEK(&H7F00+31) AND 8) OR 224)
5050 P2$="":FOR I=32 TO 46:P2$=P2$+CHR$(PEEK(&H7F00+I) OR 192):NEXT
5060 P2$=CHR$((PEEK(&H7F00+31) AND 2) OR 225)+P2$+CHR$((PEEK(&H7F00+47) AND 8) OR 224)
5070 P3$="":FOR I=48 TO 62:P3$=P3$+CHR$(PEEK(&H7F00+I) OR 192):NEXT
5080 P3$=CHR$((PEEK(&H7F00+47) AND 2) OR 225)+P3$+CHR$((PEEK(&H7F00+63) AND 8) OR 224)
5090 P4$="":FOR I=64 TO 78:P4$=P4$+CHR$(PEEK(&H7F00+I) OR 192):NEXT
5100 P4$=CHR$((PEEK(&H7F00+63) AND 2) OR 225)+P4$+CHR$((PEEK(&H7F00+79) AND 8) OR 224)
5110 P5$="":FOR I=80 TO 94:P5$=P5$+CHR$(PEEK(&H7F00+I) OR 192):NEXT
5120 P5$=CHR$((PEEK(&H7F00+79) AND 2) OR 225)+P5$+CHR$((PEEK(&H7F00+95) AND 8) OR 224)
5130 P6$="":FOR I=96 TO 110:P6$=P6$+CHR$(PEEK(&H7F00+I) OR 192):NEXT
5140 P6$=CHR$((PEEK(&H7F00+95) AND 2) OR 225)+P6$+CHR$((PEEK(&H7F00+111) AND 8) OR 224)
5150 P7$="":FOR I=112 TO 126:P7$=P7$+CHR$((PEEK(&H7F00+I) AND 1)+228):NEXT
5160 P7$=CHR$(235)+P7$+CHR$(236)
5200 LOCATE 6,9:PRINT P0$
5210 LOCATE 6,10:PRINT P1$
5220 LOCATE 6,11:PRINT P2$
5230 LOCATE 6,12:PRINT P3$
5240 LOCATE 6,13:PRINT P4$
5250 LOCATE 6,14:PRINT P5$
5260 LOCATE 6,15:PRINT P6$
5270 LOCATE 6,16:PRINT P7$
5280 RETURN
6000 '== ショキ  ガメン  ==
6010 UW$=CHR$(226)+CHR$(226)+CHR$(226)+CHR$(226)+CHR$(226)
6020 C0$=CHR$(192)+CHR$(192)+CHR$(192)+CHR$(192)+CHR$(192)
6030 LW$=CHR$(228)+CHR$(228)+CHR$(228)+CHR$(228)+CHR$(228)
6100 CLS
6110 FOR I=10 TO 16 STEP 2
6120   FOR J=6 TO 22 STEP 2
6130     COLOR J,I,1
6140   NEXT
6150 NEXT
6160 LOCATE 5,2:PRINT"DRUAGA MAP GENERATOR"
6170 LOCATE 12,19:PRINT CHR$(176)+CHR$(177)+CHR$(178)+CHR$(179)+CHR$(180)+CHR$(181)
6180 LOCATE 12,20:PRINT CHR$(182)+CHR$(183)+CHR$(184)+CHR$(185)+CHR$(186)+CHR$(187)
6190 LOCATE 12,21:PRINT CHR$(188)+CHR$(189)+CHR$(190)+CHR$(191)+CHR$(237)+CHR$(238)
6200 RETURN
6300 '== プレ-ン  マップ  ==
6310 FL$=STR$(FL):IF LEN(FL$)=2 THEN FL$=" 0"+RIGHT$(FL$,1)
6320 LOCATE 11,5:PRINT"FLOOR"+FL$
6330 LOCATE 6,9:PRINT CHR$(233)+UW$+UW$+UW$+CHR$(234)
6340 FOR I=10 TO 15:LOCATE 6,I:PRINT CHR$(225)+C0$+C0$+C0$+CHR$(224):NEXT
6350 LOCATE 6,16:PRINT CHR$(235)+LW$+LW$+LW$+CHR$(236)
6360 RETURN
7000 '== イキサキ  ビョウガ  ==
7010 X=(NP MOD 16)+7:Y=(NP/16)+9
7020 IF X=22 GOTO 7100
7030 IF Y=9 GOTO 7200
7040 IF Y=16 GOTO 7300
7050 LOCATE X,Y:PRINT CHR$((PEEK(&H7F00+NP)) OR 192):RETURN
7100 IF NP>CP THEN LOCATE 22,Y:PRINT CHR$(248):RETURN
7110 LOCATE 6,Y+1:PRINT CHR$(243):RETURN
7200 LOCATE X,9:PRINT CHR$(246):RETURN
7300 LOCATE X,16:PRINT CHR$(245):RETURN
7500 '== ゲンザイイチ  ビョウガ  ==
7510 X=(CP MOD 16)+7:Y=(CP/16)+9
7520 LOCATE X,Y:PRINT CHR$((PEEK(&H7F00+CP)) OR 192):RETURN
8000 '== カベヲ  ウエニ  ==
8010 W1=17:W2=20:NP=CP-16:RETURN
8100 '== カベヲ  シタニ  ==
8110 W1=20:W2=17:NP=CP+16:RETURN
8200 '== カベヲ  ヒダリニ  ==
8210 W1=24:W2=18:NP=CP-1:RETURN
8300 '== カベヲ  ミギニ  ==
8310 W1=18:W2=24:NP=CP+1:RETURN
9000 '== ランスウ  セイセイ  ==
9010 S1=(S1*5+1) AND 255
9020 CF=(S2*2)/256
9030 S2=(S2*2) AND 255
9040 IF CF=0 GOTO 9070
9050 IF (32 AND S2)=0 GOTO 9090
9060 GOTO 9080
9070 IF (32 AND S2)<>0 GOTO 9090
9080 S2=(S2+1) AND 255
9090 A=S2 XOR S1
9100 RETURN

 

 

 

Joomla templates by a4joomla