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 : cellWidthcellHeight から作成される、マスのサイズを表す 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 内での座標に変換する際に使用されます。

以上が、このコードの概要です。具体的なアプリケーションの実装には依存しますが、このコードはマウスの位置に合わせてコマを移動するための計算式を提供するものと理解していただければと思います。