現在、「GoMoku」と呼ばれる小さな 2 人用ゲームをプログラミングしています。「コネクト4」と同じように、フィールドのどこにでも石をセットできる違いがあります。forループで作成し、ボタンの配列にプレーヤーの番号を設定するいくつかのボタンでそれを実現しました。それは非常にうまく機能しますが、フォームのフレームの近くにあるボタンをクリックすると、常に範囲外の例外があると表示されます。場所をデバッグして確認しましたが、間違っている場合とそうでない場合があります。ランダムの一種。私は何を間違っていますか?どうすればこの問題を解決できますか?
これが私のコードです:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Gomoku
{
public partial class Form1 : Form
{
int player = 1;
int[,] positions = new int[25, 25];
public Form1()
{
InitializeComponent();
label2.Text = "player one's turn";
for (int y = 0; y < 18; y++)
{
for (int x = 0; x < 18; x++)
{
Button button = new Button();
button.Location = new Point(x * 20, y * 20);
button.Size = new Size(20, 20);
button.Click += button1_Click;
tabPage1.Controls.Add(button);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
int Xcount = 0;
int Ycount = 0;
Button button = sender as Button;
if (button.BackColor == Color.Transparent)
{
if (spieler == 1)
{
label2.Text = "player two's turn";
button.BackColor = Color.Red;
positions[button.Location.X / 20 + 1, button.Location.Y / 20 + 1] = player;
for (int i = 0; i < 4; i++)
{
if (positions[button.Location.X / 20 + 1 + i, button.Location.Y / 20 + 1] == player)
{
Xcount++;
}
if (positions[button.Location.X / 20 + 1 - i, button.Location.Y / 20 + 1] == player)
{
Xcount++;
}
if (positions[button.Location.X / 20 + 1, button.Location.Y / 20 + 1 + i] == player)
{
Ycount++;
}
if (positions[button.Location.X / 20 + 1, button.Location.Y / 20 + 1 - i] == player)
{
Ycount++;
}
if (Xcount == 5 || Ycount == 5)
{
label2.Text = "player two wins";
}
}
player = 2;
}
else if (player == 2)
{
for (int i = 0; i < 4; i++)
{
if (positions[button.Location.X / 20 + 1 + i, button.Location.Y / 20 + 1] == player)
{
Xcount++;
}
if (positions[button.Location.X / 20 + 1 - i, button.Location.Y / 20 + 1] == player)
{
Xcount++;
}
if (positions[button.Location.X / 20 + 1, button.Location.Y / 20 + 1 + i] == player)
{
Ycount++;
}
if (positions[button.Location.X / 20 + 1, button.Location.Y / 20 + 1 - i] == player)
{
Ycount++;
}
if (Xcount == 5 || Ycount == 5)
{
label2.Text = "player two wins";
}
label2.Text = "player one's turn";
button.BackColor = Color.Blue;
positions[button.Location.X / 20 + 1, button.Location.Y / 20 + 1] = player;
player = 1;
}
}
}
}
}
}