wizのようなダンジョンを歩く


wiz風のゲーム作りたくてまずダンジョンを歩くのを作ってみました。
素人が作ったので無駄な部分が大分あるとおも…(特に描画部分)

(ソース短くなったけど処理重くなっちまったver→wiz風ダンジョン0,2)

操作方法
↑・前進
←→・向きを変える
↓・後ろを向く
センター・扉を開ける&前進

ソフトキー1の[MAPロード]ってのは、wiz風(ryのヘボイマップ作成ツールで作ったデータをload()して別のマップを歩けるようにする事が出来ます。(データが無いとエラーになる)

↓ここからソース↓

'◆初期設定'
WAIT=10
PH=2
PX=0
PY=0
setfont("T")
G=sthigh/2
@(CL,0,0x505050,0x909090,0xC0C0C0,0xFFFFFF)@(PA,0,-1,0,1)@(PB,-1,0,1,0)@(PC,"西","北","東","南")HX=PX*3+1HY=PY*3+1
soft1("MAPロード")soft2("終了")
'◆マップデータの処理'
map="1080606262668261688686200670662262316002082008220780603626803826806036220208262066262201088062620826262262306206806062000680662687262620600206262513482622000160062685157826800344162622626262052202320208"
label AAC
MAPS=substr(map,0,2)/1
for(a=0;a<MAPS;++a){
for(b=0;b<MAPS;++b){
I=substr(map,a*MAPS*2+b*2+2,1)
H=substr(map,a*MAPS*2+b*2+3,1)
MAP[3*b][a*3+1]=I%3
MAP[3*b+1][a*3]=I/3
MAP[b*3+1][a*3+2]=H%3
MAP[b*3+2][a*3+1]=H/3
}}

'◆描画処理'
label AAB
PA=PA[PH] PB=PB[PH] PC=PC[PH]
lock()
col(CL[0])frect(0,0,G*40,G*40)col(CL[4])
for(a=-3;a<=2;a=a+1){
z=MAP[HX-a*3*PA+7*PB][HY+a*3*PB+7*PA]
if(z>0){col(CL[1])rect(G*(15+10*a),G*15,G*10,G*10)if(z<2){rect(G*(10*a+18),G*18,G*4,G*7)}}}
for(a=0;a<=3;a=a+1){
b=a-2 c=16*a-4 d=10*a+5 g=16*a-4 h=14*a-1 i=12*a+2
if(b>-1){b=b+1 g=15+10*b}
e=abs(b)*b
z=MAP[HX-e*PA+6*PB][HY+e*PB+6*PA]
if(z>0){col(CL[0])frect(G*g,G*12,G*pow(3,abs(b)),G*14)col(CL[2])line(G*c,G*12,G*d,G*15)line(G*c,G*12,G*c,G*28)line(G*d,G*15,G*d,G*25)line(G*d,G*25,G*c,G*28)
if(z<2){line(G*h,G*33/2,G*i,G*35/2)line(G*h,G*33/2,G*h,G*27)line(G*i,G*35/2,G*i,G*26)}}}
for(a=-1;a<=1;a=a+1){
z=MAP[HX-a*PA*3+4*PB][HY+a*PB*3+4*PA]
if(z>0){col(CL[0])frect(G*(12+16*a),G*12,G*16,G*16)col(CL[3])rect(G*(12+16*a),G*12,G*16,G*16)if(z<2){rect(G*(16*a+16),G*16,G*8,G*12)}}}
for(a=0;a<=1;a=a+1){
b=6+28*a c=12+16*a d=2*a-1 e=24*a+8 f=18*a+11 z=MAP[HX+3*PB-d*PA][HY+3*PA+d*PB]
if(z>0){col(CL[0])frect(G*(6+22*a),G*6,G*6,G*28)col(CL[3])line(G*b,G*6,G*c,G*12)line(G*b,G*6,G*b,G*34)line(G*c,G*12,G*c,G*28)line(G*b,G*34,G*c,G*28)if(z<2){line(G*e,G*13,G*f,G*31/2)line(G*e,G*13,G*e,G*32)line(G*f,G*31/2,G*f,G*29)}}}
for(a=-1;a<=1;a=a+1){
if(MAP[HX-a*PA*3+PB][HY+a*PB*3+PA]>0){col(CL[0])frect(G*(6+28*a),G*6,G*28,G*28)col(CL[4])rect(G*(6+28*a),G*6,G*28,G*28)}}
if(MAP[HX+PB][HY+PA]>0&MAP[HX+PB][HY+PA]<2){rect(G*12,G*12,G*16,G*22)}
for(a=0;a<=1;a=a+1){
b=6+28*a c=2*a-1 d=a*36+2 z=MAP[HX-c*PA][HY+c*PB]
if(z>0){col(CL[0])frect(G*34*a,0,G*6,G*35)col(CL[4])line(G*(40*a),0,G*b,G*6)line(G*b,G*6,G*b,G*34)line(G*(40*a),G*40,G*b,G*34)if(z<2){line(G*a*40,G*7,G*d,G*9)line(G*d,G*9,G*d,G*38)}}}
col(0x00FFFF)text("X_Y_方向",0,0,5)col(CL[4])text(HX/3,G*2,0,5)text(HY/3,G*6,0,5)text(PC,G*12,0,5)frect(G*40,0,G*40,G*40)
unlock(1)

'キー読み取って移動処理etc'
input(WAIT)
if(scan&4096){if(MAP[HX+PB][HY+PA]==0){col(CL[4])text("▲",G*19,0,5)HX=HX+3*PB HY=HY+3*PA}}if(scan&65536){if(MAP[HX+PB][HY+PA]<=1){col(CL[4])text("▲",G*19,0,5)HX=HX+3*PB HY=HY+3*PA}}if(scan&32768){PH=PH+2if(PH>3){PH=PH-4}}if(scan&8192){PH=PH-1if(PH<0){PH=3}}if(scan&16384){PH=PH+1if(PH>3){PH=0}}if(scan&262144){end}if(scan&131072){map=load()goto"AAC"}
goto "AAB"