HEXのマスとタップの座標をデータ化する


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

 分かり難いけど上の真ん中に赤字で現在のマスが表示されている
 
 
 めんどくさいけど、アンドロイド実機でもテストしてみる。

 できました

 
 
 今回はここまで。

コメントを残す

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