ページ 11

将棋等のプログラムでマウスを使用する場合

Posted: 2014年8月08日(金) 13:52
by mari
将棋等のボードゲームで、とある駒をマウスでクリックした際に移動可能のマスを示すプログラムはどう書けばいいのでしょうか??

ex)歩兵をクリックした際、1マス前に印を表示する。

どうかよろしくお願いします。

Re: 将棋等のプログラムでマウスを使用する場合

Posted: 2014年8月08日(金) 14:43
by usao
駒をクリック~移動可能マスを示す の間において
不明点は何なのでしょう???

Re: 将棋等のプログラムでマウスを使用する場合

Posted: 2014年8月08日(金) 15:11
by mari
根本からなのですが、
1.駒をクリックするプログラムの書き方
2.クリックした際に移動範囲を表示するプログラムの書き方
です

Re: 将棋等のプログラムでマウスを使用する場合

Posted: 2014年8月08日(金) 15:45
by usao
>1.駒をクリックするプログラムの書き方

マウスのボタンが押下された(あるいは 押して→離した)とき,
その座標が 駒の場所であるかどうかをチェックすればいいのではないでしょうか.


>2.クリックした際に移動範囲を表示するプログラムの書き方

実際に駒が移動できる範囲がどう決まるのか?についてはあなたのゲームのルール次第ですし,
ルールだけが説明されても
その算定方法はあなたのプログラムがゲームのデータをどのように扱っているか?等によります.
ここで詰まるようであれば,その時は具体的なコードを提示して質問する等の必要があるかと思います.

範囲が求まったら 後はそれを好きに表示すればよいです.
(駒等の表示ができているのであればここは問題ないでしょう)


(1)どのような環境(プラットフォーム,利用言語やライブラリ等)なのかわかりませんが
 まずはその環境におけるマウスクリック時の処理の書き方
 (マウスのボタンが押されたことをどうやって知るのか)
 について調べられると良いのではないでしょうか.
 ↓
(2)クリックを検出できるようになったら,
 クリック時に,クリックされた座標が
 駒を選択する際にクリックすべき範囲内であるかどうかを判定
 ↓
(3)駒が選択されたようであれば,
 ゲームのルールに則り,その駒を動かせる範囲を求める
 ↓
(4)その範囲を提示するための何らかの表示を行う

Re: 将棋等のプログラムでマウスを使用する場合

Posted: 2014年8月08日(金) 18:39
by mari
私は現在DXライブラリの方を使用しています。

マウスクリック時の座標を得る関数を使い、情報を得ることはできるのですが、

>(2)クリックを検出できるようになったら,
 クリック時に,クリックされた座標が
 駒を選択する際にクリックすべき範囲内であるかどうかを判定

のところのプログラムはどのように書けばよいのでしょうか?

Re: 将棋等のプログラムでマウスを使用する場合

Posted: 2014年8月08日(金) 19:10
by usao
えーと…
例えば将棋であれば,クリックされたピクセル座標がわかれば
その位置が将棋盤のどのマスの中にあるのか
(あるいは持ち駒のある場所だったりするのか,全然関係ない背景部分なのか)
ということがわかるはずですよね.
(駒の表示等を行っているハズですから,盤のマスや持ち駒がある場所等の表示上のピクセル座標は既知なハズ.
 例えば,盤上の座標「5四」の位置にある駒を 描画するためのピクセル座標というのを
 なんらかの計算により決定してそこに描画してるのでしょうから,
 その逆方向の座標変換,すなわち, ピクセル座標→盤上座標 という計算もできるはず)

で,その場所(マス)がわかれば,あとはそこに現在の手番において操作可能な駒があるのかどうかを
判断すれば良いと思います.
オフトピック
以降,私用により本日は返信できませんので,他の方の回答を期待します.

Re: 将棋等のプログラムでマウスを使用する場合

Posted: 2014年8月08日(金) 19:49
by softya(ソフト屋)
>駒を選択する際にクリックすべき範囲内であるかどうかを判定
>のところのプログラムはどのように書けばよいのでしょうか?

ただの当たり判定ですので、シューティングやアクションが作れるなら分かると思います。
点と四角の当たり判定で検索してもらうと沢山みつかります。

ただ、それ以前に分かっていないことが多そうなので、もっと根本的な部分から勉強されたほうが良いと思います。
と言うことで最近この掲示板で挑戦者の多いマウスを使わない三目並べに挑戦してみませんか?