WindwosFormsアプリで、ボードゲーム上の位置をセルに合わせる
マウスの位置で選択できるセルの位置に合う座標を取得するサンプルです
実行結果
コードサンプル
int xRatio = banSize.Width / pictureBox1.Width;
int yRatio = banSize.Height / pictureBox1.Height;
int cellWidth = 35;
int cellHeight = 39;
Size cellSize = new Size(cellWidth, cellHeight);
int x = RoundToNearestCell(e.X + xRatio + Shogi_ban.Left, cellSize.Width) - cellSize.Width / 2;
int y = RoundToNearestCell(e.Y + yRatio + Shogi_ban.Top, cellSize.Height) - cellSize.Height / 2;
pictureBox1.Location = new Point(x, y);
private int RoundToNearestCell(double value, int cellSize)
{
return (int)Math.Round(value / cellSize) * cellSize;
}
このコードは、C# を用いて将棋盤を描画するためのコードです。以下は各行の処理の説明です。
banSize
: 将棋盤のサイズを表すSize
オブジェクト。pictureBox1
: コマのイラストを表示するためのPictureBox
コントロール。cellWidth
,cellHeight
: 将棋盤の各マスの幅と高さを表す整数値。cellSize
:cellWidth
とcellHeight
から作成される、マスのサイズを表すSize
オブジェクト。xRatio
,yRatio
: 将棋盤全体に対するpictureBox1
の横幅と縦幅の比率を計算するための変数。e.X
,e.Y
: マウスの現在位置を表すイベント引数。Shogi_ban
: 将棋盤を表示するためのPictreBox
コントロール。RoundToNearestCell
メソッド : 渡された値を、cellSize
の倍数に四捨五入した値を返す関数。
将棋盤を示すPictureBoxのSizeModeがStretchImageのため、調整が必要です
xRatio と yRatio は、将棋盤全体と pictureBox1 のサイズから求められます。これらの比率は、後にマウスの位置に対して pictureBox1 内での座標を計算する際に使用されます。
x と y の座標は、マウスの位置から計算されます。具体的には、e.X や e.Y に対して Shogi_ban コントロール内での座標に変換し、その座標を cellSize の倍数に合わせて四捨五入します。この際に、 xRatio や yRatio を使用して pictureBox1 内での相対的な座標を計算します。
最後に、計算された座標を pictureBox1 の Locationプロパティにセットして、コマの位置を移動させます。
RoundToNearestCell 関数は、引数として渡された値を cellSize の倍数に四捨五入して整数値で返します。この関数は、マウスの位置を pictureBox1 内での座標に変換する際に使用されます。
以上が、このコードの概要です。具体的なアプリケーションの実装には依存しますが、このコードはマウスの位置に合わせてコマを移動するための計算式を提供するものと理解していただければと思います。
ディスカッション
コメント一覧
まだ、コメントがありません