各ボタン固有の座標を保持する2次元の文字列配列があります
string[,] gridPass = new string[20, 20];
private void Form1_Load(object sender, EventArgs e)
{
foreach (int row in Enumerable.Range(0, 20))
{
foreach (int col in Enumerable.Range(0, 20))
{
Button b = new Button();
b.Size = new System.Drawing.Size(30, 30);
b.Location = new Point(row * 30, col * 30);
gridPass[row, col] = row.ToString() + " - " + col.ToString();
b.Tag = gridPass[row, col];
b.Text = gridPass[row, col];
this.Controls.Add(b);
b.Click += new EventHandler(AttackHandler);
}
}
ボタンのイベント ハンドラーを使用して攻撃するとき
private void AttackHandler(object sender, EventArgs e)
{
Button clickedButton;
string tagValue = "";
clickedButton = (Button)sender;
tagValue = (string)clickedButton.Tag;
theSea.attackLocation(tagValue);
}
ボタンの座標が何であれ、明らかに 0 - 1 または 8 - 4 のような文字列を送信しています。その文字列を Sea クラスの attackLocation メソッドに渡すときに、これら 2 つの数値を抽出して、Sea クラスの配列でそれらを参照し、そこにボートがあるかどうかを確認できるようにしたいと考えています。基本的に別の配列のまったく同じ場所を参照するには、これらの X 値と Y 値が必要です。だから私は何かをすることができます。
public void attackLocation(string attackCoords)
{
MessageBox.Show("Attacking " + attackCoords);
x = however to convert it back;
y = however to convert it back;
foreach (Ship s in shipList)
{
if (grid[x,y] == 0)
{
MessageBox.Show("Attacked this block before.");
}