HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0913
うひょ区切りを考慮して正確なマスの座標を取得したい4解決


うひょ

リンク

2006/9/13(Wed) 18:38:29|NO.2404

↓のようなスクリプトでマウスの乗っているマスのみ色を変えているのですが、
区切りがあるため正確なマスの座標を取得することができません。
どう改造すれば正確にマスの座標を取得できるでしょうか…。

#uselib "user32.dll" #cfunc WindowFromPoint "WindowFromPoint" int, int #const global MASU_SIZE 57 #const global KUGIRI_WEIGHT 2 #const SCREEN_X (MASU_SIZE * 9) + (KUGIRI_WEIGHT * 10) + 1 #const SCREEN_Y (MASU_SIZE * 9) + (KUGIRI_WEIGHT * 10) + 1 #module #const global BOARD_COLOR $E7E3AD #const global BOARD_MOUSEOVER_COLOR $FF4D00 #deffunc color32 int intA color intA >> 16 & $FF,intA >> 8 & $FF,intA & $FF return #define global PrintMasu(%1,%2,%3=BOARD_COLOR) _PrintMasu %1,%2,%3 #deffunc _PrintMasu int intX,int intY,int COL,local x,local y x = intX * MASU_SIZE + (KUGIRI_WEIGHT * intX) + 2 y = intY * MASU_SIZE + (KUGIRI_WEIGHT * intY) + 2 color32 COL boxf x,y,x+MASU_SIZE,y+MASU_SIZE color32 $FFFFFF line x+MASU_SIZE,y,x,y line x,y+MASU_SIZE,x,y return #deffunc PrintBoard redraw 0 color 0,0,0 boxf repeat 9 mx = cnt repeat 9 PrintMasu mx,cnt loop loop redraw 1 return #global screen 0,SCREEN_X,SCREEN_Y PrintBoard ;ボードを描画 gsel 0 hwnd0 = hwnd *main if WindowFromPoint(ginfo(0),ginfo(1)) = hwnd0{ ;メインウィンドウにマウスが乗っているか redraw 0 gsel 0 PrintMasu xx,yy ;前の場所をもとに戻す xx = mousex/MASU_SIZE - ((mousex/MASU_SIZE) >= length(board)) ;色を変えるマスX yy = mousey/MASU_SIZE - ((mousey/MASU_SIZE) >= length2(board)) ;色を変えるマスY PrintMasu xx,yy,BOARD_MOUSEOVER_COLOR ;新しい場所の色を変える redraw 1 } wait 10 goto *main



この記事に返信する


猫太

リンク

2006/9/13(Wed) 20:48:34|NO.2406


xx = mousex/MASU_SIZE - ((mousex/MASU_SIZE) >= length(board)+MASU_SIZE) ;色を変えるマスX yy = mousey/MASU_SIZE - ((mousey/MASU_SIZE) >= length2(board)+MASU_SIZE) ;色を変えるマスY
で出来たっぽいですが、これではダメですか?



うひょ

リンク

2006/9/13(Wed) 21:39:53|NO.2407

ありがとうございます。
しかし、これでは少しずれてしまいます。



KIMU

リンク

2006/9/13(Wed) 22:54:42|NO.2408

不完全なサンプルは余計遠回りになる可能性があるので、
ちゃんと確かめてから書き込んで・・・

boardの要素が定義されてないので、不都合の部分を、猫太さんが誤解したんですよ。



dim board,SCREEN_X/MASU_SIZE,SCREEN_Y/MASU_SIZE *main if WindowFromPoint(ginfo(0),ginfo(1)) = hwnd0{ ;メインウィンドウにマウスが乗っているか redraw 0 gsel 0 PrintMasu xx,yy ;前の場所をもとに戻す tempx=(mousex-(mousex/MASU_SIZE)*KUGIRI_WEIGHT-2)/MASU_SIZE tempy=(mousey-(mousey/MASU_SIZE)*KUGIRI_WEIGHT-2)/MASU_SIZE xx = tempx - (tempx >= length(board)) ;色を変えるマスX yy = tempy - (tempy >= length2(board)) ;色を変えるマスY PrintMasu xx,yy,BOARD_MOUSEOVER_COLOR ;新しい場所の色を変える redraw 1 } wait 10 goto *main



うひょ

リンク

2006/9/14(Thu) 15:21:03|NO.2419

>不完全なサンプルは余計遠回りになる可能性があるので、
>ちゃんと確かめてから書き込んで・・・
すみませんでした。一応、

dim board,9,9
で定義されていました。

あと、ありがとうございました!おかげでうまく動作させることができました。



ONION software Copyright 1997-2021(c) All rights reserved.