> マップの描画は
サンプルスクリプトを載せるときは、コピペするだけで動くようにしておいていただけるといろいろと大変助かります。
そのまま動かないようだと十分に検証されたスクリプトで無いようにも見えてしまうので、なるべく動くようにお願いします。
いろいろと考えやすくなるんじゃないかと思い、ヒント的なスクリプト書いてみたのでどうぞ。
一連の質問とスクリプトを見たところ、マップデータが処理しにくい形式なのが問題のような気がしました。
; map用タイル
screen 9
color 255,255,255
boxf 0,0,31,31
color 128,0,0
boxf 32,0,63,31
color 0,128,0
boxf 64,0,95,31
; mapデータ
map = "111111111111111111111"
map += "100000000010000000001"
map += "101110111010111011101"
map += "101110111010111011101"
map += "100000000000000000001"
map += "101110101111101011101"
map += "100000100010001000001"
map += "111110111010111011111"
map += "000010100000001010000"
map += "111110102202201011111"
map += "000000002000200000000"
map += "111110102222201011111"
map += "000010100000001010000"
map += "111110101111101011111"
map += "100000000010000000001"
map += "101110111010111011101"
map += "100010000000000010001"
map += "111010101111101010111"
map += "100000100010001000001"
map += "101111111010111111101"
map += "100000000000000000001"
map += "111111111111111111111"
; mapを数値の配列変数に変換
dim mapdata, 22, 21
r = 0 : i = 0
repeat 22
c = 0
repeat 21
mapdata(r, c) = int(strmid(map, i, 1))
c++
i++
loop
r++
loop
; mapから通路情報を作成
; 0 : 非通路
; 1 : 通路
; 2を含む : 上が空いた通路
; 4を含む : 下が空いた通路
; 8を含む : 左が空いた通路
; 16を含む : 右が空いた通路
dim maproad, 22, 21
r = 0 : i = 0
repeat 22
c = 0
repeat 21
maproad(r, c) = 0 ;非通路
if mapdata(r, c) = 0 {
maproad(r, c) = 1 ;通路
; 調査位置の上下左右
ur = r-1 : uc = c
dr = r+1 : dc = c
lr = r : lc = c-1
rr = r : rc = c+1
if ur>0 : if mapdata(ur, uc) = 0 : maproad(r, c) |= 2
if dr<22 : if mapdata(dr, dc) = 0 : maproad(r, c) |= 4
if lc>0 : if mapdata(lr, lc) = 0 : maproad(r, c) |= 8
if rc<21 : if mapdata(rr, rc) = 0 : maproad(r, c) |= 16
}
c++
loop
r++
loop
; 描画
screen 0,32*21,32*22
i = 0
redraw 0
repeat 22
my = cnt
repeat 21
; マップデータ
dmap = mapdata(my, cnt)
; 謎の処理
if game = 0{
if dmap = 1{
kabex(k) = i*32
kabey(k) = my*32
if kabex(k) > 640 : kabex(k) -= 672
k += 1
}
if dmap = 2{
kabex(k) = i*32
kabey(k) = my*32
if kabex(k) > 640 : kabex(k) -= 672
k += 1
}
game = -1
}
; 1マス描画
pos cnt*32,my*32
gmode 2,32,32
gcopy 9,dmap*32,0
i += 1
await 1
loop
await 1
loop
redraw 1
; 通路情報を可視化
screen 2
r = 0 : i = 0
repeat 22
c = 0
repeat 21
if maproad(r, c) = 0 : pos c*16, r*16 : mes "■"
if maproad(r, c) & 2 : pos c*16, r*16 : mes "↑"
if maproad(r, c) & 4 : pos c*16, r*16 : mes "↓"
if maproad(r, c) & 8 : pos c*16, r*16 : mes "←"
if maproad(r, c) & 16: pos c*16, r*16 : mes "→"
c++
loop
r++
loop
蛇足ですが、プログラミングするときは、コメントを入れる、読み込みと出力を分けるなど整理して見やすくする、などに注意した方がいいと思います。