2017年 5月27日
まずマップに番号を割り振る。
国(?)が 25あるのが分かる。
今度は色々と使う事になると思うので HEXの座標をあらかじめ配列変数で DATA化してみる。
座標計算したものを hxyd(n1,n2)の 2次配列変数に格納し hxyd.datというデータファイルにして出力する。
/////// HEX 座標 DATA///////
hbx=52 : hkx=hbx/2 ; 横の大きさ、半分、間隔
hby=90 : hky=hby/2 ; 縦の大きさ、間隔
dim hxyd,2,26 ; 格納する変数(0=x、1=y)
n=1
repeat 7 : cx=cnt : px=(hbx+hkx)*cnt+34 ; x座標
if cnt\2=0 : yk=0 : else : yk=-hky ; y座標補整
repeat 4 : cy=cnt : py=hby*cnt ; y座標
if cx=1 and cy=0 : continue ; 描かない座標
if cx=3 and cy=0 : continue
if cx=5 and cy=0 : continue
hxyd(0,n)=px ; データ格納
hxyd(1,n)=py+yk
n+
loop
loop
bsave "hxyd.dat",hxyd ; データファイル出力
これで次のプログラムだけで良くなる。
/////// HEX 描画///////
#include "hsp3dish.as"
screen 0,640,360
celload "hex_104_90_test.png",1
celdiv 1,104,90
dim hxyd,2,26 ; 格納する変数(0=x、1=y)
bload "hxyd.dat",hxyd ; 座標データ読み込み
redraw 0
color 0,0,0 : boxf : color 255,255,255
gmode 2
repeat 25,1
x=hxyd(0,cnt) : y=hxyd(1,cnt)
pos x,y : celput 1,0 ; HEX描画
pos x+44,y+36 : mes cnt ; HEX番号
loop
redraw 1
次にタップ座標を作ってみる。
これは 6角形上に座標を取るのは難しいし、円形状にシャレてみても複雑で処理が重くなるだけだし、あまり隣接しても誤動作が多くなるだけだと思うので、そりゃもう適当に四角形上に座標を取ってみる。
とりあえず、こんなもんかなあ。
これも.datファイルにして DATA化する
/////// タツプ座標 ///////
#include "hsp3dish.as"
screen 0,640,360
celload "hex_104_90_test.png",1
celdiv 1,104,90
dim hxyd,2,26 ; HEX座標変数(0=x、1=y)
bload "hxyd.dat",hxyd ; HEX座標データ読み込み
dim txyd,4,26 ; タップ変数(0=tx1、1=ty1、2=tx2、3=ty2)
redraw 0
color 0,0,0 : boxf : color 255,255,255
gmode 2
repeat 25,1
x=hxyd(0,cnt) : y=hxyd(1,cnt)
pos x,y : celput 1,0 ; HEX描画
;pos x+86,y+38 : mes cnt
tx1=x+20 : tx2=x+84
ty1=y+15 : ty2=y+75
boxf tx1,ty1,tx2,ty2 ; 矩形表示
txyd(0,cnt)=tx1
txyd(1,cnt)=ty1
txyd(2,cnt)=tx2
txyd(3,cnt)=ty2
loop
redraw 1
bsave "txyd.dat",txyd ; タップ座標データ書き出し
テストプログラム
/////// タップテスト ///////
#include "hsp3dish.as"
screen 0,640,360
celload "hex_104_90_test.png",1
celdiv 1,104,90
dim hxyd,2,26 ; HEX座標変数(0=x、1=y)
bload "hxyd.dat",hxyd ; HEX座標データ読み込み
dim txyd,4,26 ; タップ座標変数(0=tx1、1=ty1、2=tx2、3=ty2)
bload "txyd.dat",txyd ; タップ座標データ読み込み
repeat
kx=mousex : ky=mousey : kn=0
repeat 25,1 ; カーソル位置確認
if txyd(0,cnt)<kx and txyd(1,cnt)<ky and txyd(2,cnt)>kx and txyd(3,cnt)>ky : kn=cnt : break
loop
;------- 表示 -------
redraw 0
color 0,0,0 : boxf : color 255,255,255
gmode 2
repeat 25,1
x=hxyd(0,cnt) : y=hxyd(1,cnt)
pos x,y : celput 1,0 ; HEX描画
pos x+86,y+38 : mes cnt ; マス番号表示
boxf txyd(0,cnt),txyd(1,cnt),txyd(2,cnt),txyd(3,cnt) ; 矩形表示
if kn>0 : color 255,0,0 : pos 310,10 : mes kn : color 255,255,255
loop
redraw 1
await 1000/20
loop
stop
分かり難いけど上の真ん中に赤字で現在のマスが表示されている
めんどくさいけど、アンドロイド実機でもテストしてみる。
できました
今回はここまで。