一番近い吸着ポイントの見つけ方だと推測
ピースの仕様を聞いてないから使えるかは謎
//GDSIZグリッド幅:GDグリッド数:GDS_POSグリッド開始座標:pc_posピース座標:ADSP吸着範囲
GDSIZ=35:GD=10:GDS_POSX=150:GDS_POSY=50:pc_posx=0:pc_posy=0:ADSP=5
//GDWS〜GDWEグリッドウィンドウ有効範囲
GDWS_X=GDS_POSX-ADSP:GDWS_Y=GDS_POSY-ADSP:GDWE_X=GDS_POSX+GDSIZ*GD-ADSP:GDWE_Y=GDS_POSY+GDSIZ*GD-ADSP
buffer 1,,,0
repeat GD+GD+2
gd_setx=GDSIZ*cnt*(cnt<=GD)+GDS_POSX:gd_sety=GDSIZ*(cnt-GD-1)*(cnt>GD)+GDS_POSY
gd_endx=GDSIZ*GD*(cnt>GD)+gd_setx:gd_endy=GDSIZ*GD*(cnt<=GD)+gd_sety
line gd_setx,gd_sety,gd_endx,gd_endy
loop
gsel 0,1
repeat
redraw 0
pos 0,0:gcopy 1,0,0,640,480
stick st,256 :drag=((st&256)>0)*drag
if ((st&256)>0) and GDSIZ>abs(ms_x-pc_posx) and GDSIZ>abs(ms_y-pc_posy) or drag=1 {
if drag {pc_posx=ms_x+mspcx:pc_posy=ms_y+mspcy} else {mspcx=pc_posx-ms_x:mspcy=pc_posy-ms_y:pc_posx=ms_x+mspcx:pc_posy=ms_y+mspcy:drag=1}
gosub *adget ;表示用に
}else{
if (GDWS_X<=pc_posx) and (GDWE_X>=pc_posx) and (GDWS_Y<=pc_posy) and (GDWE_Y>=pc_posy){
gosub *adget ;吸着ポイント収得
//距離がADSP以内の時にgd_posにGDS_POSを足してpc_posに代入(*6)
if sqrdif<=ADSP{pc_posx=gd_posx+GDS_POSX:pc_posy=gd_posy+GDS_POSY}
}
}
pos 100,450:mes "ピース x"+str(gdpc_posx)+" y"+str(gdpc_posy)+" 最寄交差点 ["+str(gd_posx/GDSIZ)+":"+str(gd_posy/GDSIZ)+"] 差分 x"+str(mindif_x)+" y"+str(mindif_y)+" 距離 "+str(sqrdif)
boxf pc_posx,pc_posy,pc_posx+GDSIZ,pc_posy+GDSIZ
wait 1:ms_x=mousex:ms_y=mousey
redraw 1
loop
//吸着ポイント収得
*adget
gdpc_posx=pc_posx-GDS_POSX:gdpc_posy=pc_posy-GDS_POSY ;グリッド内の座標(*1)
dif_x=gdpc_posx\GDSIZ:dif_y=gdpc_posy\GDSIZ ;左上の交差点からの差分(*2)
//if dif_x>(GDSIZ/2):mindif_x=dif_x-GDSIZ:else:mindif_x=dif_x ;(これを計算だけでやったのが↓)
mindif_x=dif_x-GDSIZ*(dif_x>(GDSIZ/2)) :mindif_y=dif_y-GDSIZ*(dif_y>(GDSIZ/2)) ;一番近い交差点までの差分(*3)
gd_posx=gdpc_posx-mindif_x:gd_posy=gdpc_posy-mindif_y ;一番近い交差点(*4)
sqrdif=sqrt(mindif_x*mindif_x+mindif_y*mindif_y) ;一番近い交差点までの距離(*5)
return
重要なのは(*1)〜(*6)(こんなに分ける必要はないだろうけど・・・)
ピース座標をパズル盤面の座標に
ピースサイズでピース座標を割った余りが各ベースポジションまでの差分座標
その差分をピース座標から引くと近い左上のベースポジションが出せる
差分がサイズの半分以上なら一つ隣のポジションの方が近い
差分を線分距離にして判定
ウィンドウ座標に戻す
*2と*3が理解出来れば簡単だと思う
>吸着したことが判るように変数に1とか代入できるともっといいけど・・・
そんなのは、やりかたが分かれば自由に出来るでしょ
後、質問するならもっとやってる事を、分かるようにして欲しい
ピース分割の仕様ぐらいは、書いてもいんじゃない?
それと表示サンプルとかさ・・・
#説明の変数名が違ってたので再掲載