2021年 9月 15日
各国の戦力ダイス表示を作る。
1、中点を算出する
まずもって各国の表示の中心点を算出する。
白がマップ生成時の最初の点、赤ダイスが国の中心点座標。
求め方は案外簡単で、その国の全 HEXの x座標と y座標を足して、その HEX数で割ってやれば良い。
#deffunc center_set ; 中間座標 dim lcx,ldb ; 中間座標x dim lcy,ldb ; 中間座標y repeat ldb,1 : ldn=cnt ldg=ldn*ldob x=0 : y=0 : c=0 repeat ldob : mn=ld(ldg+cnt) if mn=0 : break x+=mn\hxb*hkx+(mn/hyb\2)*15+hxp y+=mn/hxb*hky+hyp c+ ; 国の総数 loop lcx(ldn)=x/c ; 中間点x lcy(ldn)=y/c ; 中間点y if lcy(ldn)<40 : lcy(ldn)=40 ; 上上限 loop return
例えば、その国の HEX数が 10個だったとして、10個の HEXの X座標を全部足して 10で割ってやれば x座標の中点座標になる。
最後の if lcy(ldn)<40 : lcy(ldn)=40は、最上部のサイコロ表示が切れないように下げてる。
2、ダイス表示の順番を算出する
上部のダイス表示から順に下部のダイス表示をしていかないと、陰になって分からなくなる。
各国のダイス表示の順番を算出しないといけない。
#deffunc dpd_set ; ダイス表示順番 dim dpd,ldb ; ダイス表示順番 repeat ldb : dpd(cnt)=0 : loop c=0 repeat mb : mn=cnt if map(mn)<=0 : continue ldn=map(mn) f=0 repeat ldb if dpd(cnt)=ldn : f=1 : break loop if f=1 : continue ; 登録済み dpd(c)=ldn : c+ loop return
マップ HEXのデータを 0から(上から)国がないか調べて、その順に表示順を登録している。
下のダイス表示が手前(後から表示)になってるのが分かると思う。
3、ダイスの目を白抜きする
ダイス表示の際、ダイスの目の部分を白表示する。
ダイスは各プレイヤーの色で塗られているので、ダイスの画像の目の部分も同じように変わってしまう。
元の画像
gmulcolorで色を変えてる。
目の部分をどうするか、PNG画像で目の部分を透明抜きにし、背景に白画像を張れば良い。
表示
; 国のサイコロ表示 gmode 2 repeat ldb : ldn=dpd(cnt) ldcn=ldcd(ldn) ; 国のダイス数 mn=ld(ldn*ldob) ; マップNo. ldn=map(mn) : pn=lpd(ldn) gmulcolor cld((pn-1)*3+1),cld((pn-1)*3+2),cld((pn-1)*3+3) pn=lpd(ldn) ; 勢力No. c1=cld((pn-1)\20*3+1)-20 : if c1<0 : c1=0 c2=cld((pn-1)\20*3+2)-20 : if c2<0 : c2=0 c3=cld((pn-1)\20*3+3)-20 : if c3<0 : c3=0 dpn=pn : if pn>=12 : dpn=0 ; 表示ダイスNo. c=(ldcn-1)/4*4 ; サイコロ補正座標用 repeat ldcn : n=c+cnt/4 gmulcolor 255,255,255 ; サイコロの白抜き表示 pos lcx(ldn)+dpx(n),lcy(ldn)-(cnt\4)*16+dpy(n) : celput dc28whw gmulcolor c1,c2,c3 ; サイコロ表示 pos lcx(ldn)+dpx(n),lcy(ldn)-(cnt\4)*16+dpy(n) : celput dc28w,dpn loop loop
dc28whwは上の白い四角の画像、dc28wはその上の 12個のサイコロ画像
つまり始めに白の四角い画像を張って、その上にサイコロの画像を張ってる、目の部分は透明。
ちなみに、この 12個のサイコロ画像について、本当は一つの目について 4面 4パターンの画像があるはずなんだけど、めんどくさいので、とりあえず各目が表示される 2パターンづつにしてる。
パターンは見栄えが良いと思われる組み合わせにし、実際のサイコロを見ながら決めてる。
もし緻密にダイスの表示をシミュレートするならば、全 24パターン用意しなければいけないと思う。
4、戦力ダイス表示の列補正
16個 4列になってるけど、元は 8個 2列。
変則ルールで最大 16個ダイスのようなものを考えてるけど、ゲームバランス的に良くないなら最大 8個 2列にする。
とにかくも中心点座標を元にダイスの数により座標補正がかかる。
; 国ダイスの表示位置補正 dim dpx,16 dim dpy,16 dpx=-11,11,0,0,-11,11,0,0,-22,0,22,0,-32,-11,11,32 dpy= 0,7,0,0, 0,7,0,0, -3,4,11,0, -7, 0,7,14
dpx、dpyの使用は上記のソースの「国のダイス表示」のサイコロ表示の場所で使われてる。
4個づつ、1列、2列、3列、4列の場合の座標補正データになってる。