2021年 11月 22日
なんと 40日あまりも目を使えない状態が続きました。
目に細菌だかカビだか入ったらしくて、結局市販の抗菌目薬を 2週間程さして治しましたけど、眼科にも行きましたけど原因を特定してもらえず未だに原因は不明です。
それでは続きですけど、本記事は目を悪くする前に作った部分です。
戦闘表示画面の攻守の国だけ取り出して表示するミニマップ表示を作った。

なぜこんな表示になっているのかと言うと、全マップを表示しながらサイコロアニメを表示すると FPS20出ないため、画面切り替えで戦闘表示だけする事にしてる。
まず、それぞれの国のマップ y座標の上辺と下辺がいくつか調べて変数に格納しておく。
; 最上、最下ライン repeat ldb,1 ldhx1(cnt)=-1 ldhx2(cnt)=0 ldhy1(cnt)=-1 ldhy2(cnt)=0 loop repeat hyb : cnty=cnt repeat hxb : cntx=cnt hn=hxb*cnty+cnt repeat ldb,1 if map(hn)!cnt : continue if ldhx1(cnt)=-1 : ldhx1(cnt)=cntx ; 最左ライン if ldhx2(cnt)<cntx : ldhx2(cnt)=cntx ; 最右ライン loop loop loop repeat hyb : cnty=cnt repeat hxb hn=hxb*cnty+cnt repeat ldb,1 if map(hn)!cnt : continue if ldhy1(cnt)=-1 : ldhy1(cnt)=cnty ; 最上ライン if ldhy2(cnt)<cnty : ldhy2(cnt)=cnty ; 最下ライン loop loop loop
ldhx1(n) = その国の左端座標
ldhx2(n) = その国の右端座標
ldhy1(n) = その国の上端座標
ldhy2(n) = その国の下端座標
cnt値 = 国のNo.
それから今回、改めて HEX枠表示の最外周もチェックするように改造した。
表示されない外の枠線の事、今までは計測してなかった。


; 枠情報
#deffunc waku_set ; 国土境界の枠線データ
repeat mb : hwd(cnt)=0 : loop ; 枠情報リセット
repeat hyb : cnty=cnt
repeat hxb : cntx=cnt
mn=cnty*hxb+cnt
;if cnt=hxb-1 and cnty\2=1 : continue ; 奇数列の右端は無し
n1=map(mn) : if n1<=0 : continue ; 国土では無い
repeat 6,1
hm2 mn,cnt
if hm2p=-1 { ; 地形無し
if cnt=1 { ; 右上
if cnty\2=0 and cntx=hxb-1 : hwd(mn)+=1 : continue
if cnty=0 : hwd(mn)+=1
continue
}
if cnt=2 { ; 右
if cnty\2=0 and cntx=hxb-1 : hwd(mn)+=2
if cnty\2=1 and cntx=hxb-2 : hwd(mn)+=2
continue
}
if cnt=3 { ; 右下
if cnty\2=0 and cntx=hxb-1 : hwd(mn)+=4 : continue
if cnty=hyb-1 : hwd(mn)+=4
continue
}
if cnt=4 { ; 左下
if cnty\2=0 and cntx=0 : hwd(mn)+=8 : continue
if cnty=hyb-1 : hwd(mn)+=8
continue
}
if cnt=5 { ; 左
if cntx=0 : hwd(mn)+=16
continue
}
if cnt=6 { ; 左上
if cnty\2=0 and cntx=0 : hwd(mn)+=32 : continue
if cnty=0 : hwd(mn)+=32
continue
}
}
n2=map(hm2p)
if n1=n2 : continue ; 同じ国土
if cnt=1 : hwd(mn)+=1 ; 右上
if cnt=2 : hwd(mn)+=2 ; 右
if cnt=3 : hwd(mn)+=4 ; 右下
if cnt=4 : hwd(mn)+=8 ; 左下
if cnt=5 : hwd(mn)+=16 ; 左
if cnt=6 : hwd(mn)+=32 ; 左上
loop
loop
loop
return
真ん中へんの{ }で書いてある部分が付け足した所、最外周を計測してチェックする。
ldhx1(最左)、ldhx2(最右)、ldhy1(最上段)、ldhy2(最下段)の座標を元にして戦闘表示の時に抜き出して書き出します。
#deffunc bm_put ; バトルマップ表示 if ldhx1(kln1)<ldhx1(kln2) : bmpx1=ldhx1(kln1) : else : bmpx1=ldhx1(kln2) ; 表示最上ライン if ldhx2(kln1)>ldhx2(kln2) : bmpx2=ldhx2(kln1) : else : bmpx2=ldhx2(kln2) ; 表示最下ライン bmpxk=bmpx2-bmpx1 bmpxk2=(hxb/2)-bmpx1-(bmpxk/2) ; 描画幅 if ldhy1(kln1)<ldhy1(kln2) : bmpy1=ldhy1(kln1) : else : bmpy1=ldhy1(kln2) ; 表示最上ライン if ldhy2(kln1)>ldhy2(kln2) : bmpy2=ldhy2(kln1) : else : bmpy2=ldhy2(kln2) ; 表示最下ライン if bmpy1\2=1 : bmpy1- bmpyk=bmpy2-bmpy1+1 ; 間隔 bmpyk2=(12-bmpyk)/2 ; 描き始めy座標 repeat bmpyk : cnty=cnt repeat hxb : hn=(bmpy1+cnty)*hxb+cnt gmulcolor 255,255,255 if map(hn)>0 : pn=lpd(map(hn)) : gmulcolor cld((pn-1)*3+1),cld((pn-1)*3+2),cld((pn-1)*3+3) if map(hn)=kln1 : pos (bmpxk2+cnt)*hkx+(cnty\2)*15+hxp,(bmpyk2+cnty)*hky+hyp : celput 1,1 if map(hn)=kln2 : pos (bmpxk2+cnt)*hkx+(cnty\2)*15+hxp,(bmpyk2+cnty)*hky+hyp : celput 1,1 loop loop ; 枠表示 gmulcolor 255,255,255 repeat bmpyk : cnty=cnt ; y repeat hxb : hn=(bmpy1+cnty)*hxb+cnt ; x if hwd(hn)<=0 : continue if map(hn)!kln1 and map(hn)!kln2 : continue pos (bmpxk2+cnt)*30+(cnty\2)*15+hxp,(bmpyk2+cnty)*26+hyp celput hww,hwd(hn) ; 国土境界の枠線 loop loop return
攻め込む国と攻め込まれる国の 2国の最左、最右、最上段、最下段の座標を元に表示するマップの幅と高さを特定し、大きさに合わせて描き始め座標(bmpxk2、bmpyk2)を設定して必要部分だけのマップを描き出します。
