0

現在、「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;
                    }
                }
            }
        }
    }
}
4

0 に答える 0