CDW 各国のダイス表示


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列の場合の座標補正データになってる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です