在C#中连接4作为表单应用程序

在C#中连接4作为表单应用程序,c#,C#,嘿,伙计们,我第一次尝试在C#中创建游戏Connect 4作为表单应用程序。我成功地创建了表单和按钮,当您按下它们时可以更改,但我正在努力找到按钮的数组,因此我不必处理所有按钮,也不必单独更改所有按钮的代码。另外,我正在努力寻找代码,因此当用户单击一行时,底部按钮的颜色会发生变化,而不是用户单击的按钮。提前感谢 编辑:我已经有了获胜条件的代码,所以基本上游戏是正常的,但是硬币/按钮不会因为连接4的工作而掉下来 编辑2:这是我的代码: using System; using System.Coll

嘿,伙计们,我第一次尝试在C#中创建游戏Connect 4作为表单应用程序。我成功地创建了表单和按钮,当您按下它们时可以更改,但我正在努力找到按钮的数组,因此我不必处理所有按钮,也不必单独更改所有按钮的代码。另外,我正在努力寻找代码,因此当用户单击一行时,底部按钮的颜色会发生变化,而不是用户单击的按钮。提前感谢

编辑:我已经有了获胜条件的代码,所以基本上游戏是正常的,但是硬币/按钮不会因为连接4的工作而掉下来

编辑2:这是我的代码:

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 Connect4
{
    public partial class ConnectFour : Form
    {
        public ConnectFour()
        {
            InitializeComponent();
        }

        bool red = true; //red is set to true if the next marker is to be    red
        char[] btnValues = new char[43];

        private void fourInARow(int a, int b, int c, int d)
        {
            if (btnValues[a]==btnValues[b] && btnValues[b]==btnValues[c] &&         btnValues[c] == btnValues[d])
            {
                if (btnValues[a]== '1')
                {
                    MessageBox.Show("The winner is red!");
                }
                else
                {
                    MessageBox.Show("The winner is blue!");
                }
            }

        }

        private void btn1_Click(object sender, EventArgs e)
        {
            processAButton(sender, 1);
            fourInARow(0, 1, 2, 3);
        }

        private void btn35_Click(object sender, EventArgs e)
        {
            processAButton(sender, 35);
            fourInARow(0, 1, 2, 3);
        }

        private void btn28_Click(object sender, EventArgs e)
        {
            processAButton(sender, 28);
            fourInARow(0, 1, 2, 3);
        }

        private void btn21_Click(object sender, EventArgs e)
        {
            processAButton(sender, 21);
            fourInARow(0, 1, 2, 3);
        }

        private void btn14_Click(object sender, EventArgs e)
        {
            processAButton(sender, 14);
            fourInARow(0, 1, 2, 3);
        }

        private void btn41_Click(object sender, EventArgs e)
        {
            processAButton(sender, 41);
            fourInARow(0, 1, 2, 3);
        }

        private void btn34_Click(object sender, EventArgs e)
        {
            processAButton(sender, 34);
            fourInARow(0, 1, 2, 3);
        }

        private void btn27_Click(object sender, EventArgs e)
        {
            processAButton(sender, 27);
            fourInARow(0, 1, 2, 3);
        }

        private void btn20_Click(object sender, EventArgs e)
        {
            processAButton(sender, 20);
            fourInARow(0, 1, 2, 3);
        }

        private void btn13_Click(object sender, EventArgs e)
        {
            processAButton(sender, 13);
            fourInARow(0, 1, 2, 3);
        }

        private void btn40_Click(object sender, EventArgs e)
        {
            processAButton(sender, 40);
            fourInARow(0, 1, 2, 3);
        }

        private void btn33_Click(object sender, EventArgs e)
        {
            processAButton(sender, 33);
            fourInARow(0, 1, 2, 3);
        }

        private void btn26_Click(object sender, EventArgs e)
        {
            processAButton(sender, 26);
            fourInARow(0, 1, 2, 3);
        }

        private void btn19_Click(object sender, EventArgs e)
        {
            processAButton(sender, 19);
            fourInARow(0, 1, 2, 3);
        }

        private void btn12_Click(object sender, EventArgs e)
        {
            processAButton(sender, 12);
            fourInARow(0, 1, 2, 3);
        }

        private void btn39_Click(object sender, EventArgs e)
        {
            processAButton(sender, 39);
            fourInARow(0, 1, 2, 3);
        }

        private void button42_Click(object sender, EventArgs e)
        {
            processAButton(sender, 42);
            fourInARow(0, 1, 2, 3);
        }

        private void btn25_Click(object sender, EventArgs e)
        {
            processAButton(sender, 25);
            fourInARow(0, 1, 2, 3);
        }

        private void btn18_Click(object sender, EventArgs e)
        {
            processAButton(sender, 18);
            fourInARow(0, 1, 2, 3);
        }

        private void btn11_Click(object sender, EventArgs e)
        {
            processAButton(sender, 11);
            fourInARow(0, 1, 2, 3);
        }

        private void btn38_Click(object sender, EventArgs e)
        {
            processAButton(sender, 38);
            fourInARow(0, 1, 2, 3);
        }

        private void btn31_Click(object sender, EventArgs e)
        {
            processAButton(sender, 31);
            fourInARow(0, 1, 2, 3);
        }

        private void btn24_Click(object sender, EventArgs e)
        {
            processAButton(sender, 24);
            fourInARow(0, 1, 2, 3);
        }

        private void btn17_Click(object sender, EventArgs e)
        {
            processAButton(sender, 17);
            fourInARow(0, 1, 2, 3);
        }

        private void btn10_Click(object sender, EventArgs e)
        {
            processAButton(sender, 10);
            fourInARow(0, 1, 2, 3);
        }

        private void btn37_Click(object sender, EventArgs e)
        {
            processAButton(sender, 37);
            fourInARow(0, 1, 2, 3);
        }

        private void btn30_Click(object sender, EventArgs e)
        {
            processAButton(sender, 30);
            fourInARow(0, 1, 2, 3);
        }

        private void btn23_Click(object sender, EventArgs e)
        {
            processAButton(sender, 23);
            fourInARow(0, 1, 2, 3);
        }

        private void btn16_Click(object sender, EventArgs e)
        {
            processAButton(sender, 16);
            fourInARow(0, 1, 2, 3);
        }

        private void btn9_Click(object sender, EventArgs e)
        {
            processAButton(sender, 9);
            fourInARow(0, 1, 2, 3);
        }

        private void btn36_Click(object sender, EventArgs e)
        {
            processAButton(sender, 36);
            fourInARow(0, 1, 2, 3);
        }

        private void btn29_Click(object sender, EventArgs e)
        {
            processAButton(sender, 29);
            fourInARow(0, 1, 2, 3);
        }

        private void btn22_Click(object sender, EventArgs e)
        {
            processAButton(sender, 22);
            fourInARow(0, 1, 2, 3);
        }

        private void btn15_Click(object sender, EventArgs e)
        {
            processAButton(sender, 15);
            fourInARow(0, 1, 2, 3);
        }

        private void btn8_Click(object sender, EventArgs e)
        {
            processAButton(sender, 8);
            fourInARow(0, 1, 2, 3);
        }

        private void btn7_Click(object sender, EventArgs e)
        {
            processAButton(sender, 7);
            fourInARow(0, 1, 2, 3);
        }

        private void btn6_Click(object sender, EventArgs e)
        {
            processAButton(sender, 6);
            fourInARow(0, 1, 2, 3);
        }

        private void btn5_Click(object sender, EventArgs e)
        {
            processAButton(sender, 5);
            fourInARow(0, 1, 2, 3);
        }

        private void btn4_Click(object sender, EventArgs e)
        {
            processAButton(sender, 4);
            fourInARow(0, 1, 2, 3);
        }

        private void btn3_Click(object sender, EventArgs e)
        {
            processAButton(sender, 3);
            fourInARow(0, 1, 2, 3);
        }

        private void btn2_Click(object sender, EventArgs e)
        {
            processAButton(sender, 2);
            fourInARow(0, 1, 2, 3);
        }

        private void btn32_Click(object sender, EventArgs e)
        {
            processAButton(sender, 32);
            fourInARow(0, 1, 2, 3);
        }

        private void processAButton(object sender, int buttonNumber)
        {
            if (((Button)sender).BackColor == Color.OliveDrab)
            {
                if (red == true)
                {
                    ((Button)sender).BackColor = Color.Red;
                    btnValues[buttonNumber] = '1';
                }
                else
                {
                    ((Button)sender).BackColor = Color.Blue;
                    btnValues[buttonNumber] = '2';
                }
                red = !red;
            }
        }
    } 


}

这是一个完整的工作应用程序: 这可能会帮助你理解如何写各个方面,并将它们与你自己的进行比较。我与作者没有任何关系,但他提供了他的资料,我对此表示赞赏


但是,如果不了解您的代码,就很难为您的问题编写具体的答案。

我认为您不需要数组来实现这一点,它可以比这简单得多。 只需从表单设计器中选择一个
面板
,并将其添加到表单中,现在将所有按钮添加到此面板中,并使用foreach循环访问它们。例如,面板名称为
panel1
,现在您可以使用代码中的一个循环访问所有按钮。下面是一个示例代码,让您了解如何将所有按钮存储在一个数组中

Button[] ButtonArray= new Button[10];
int i=0;
foreach(Control control in panel1.Controls)
 {
    Button TempButton= control as Button; 
    ButtonArray[i++]= TempButton;      // If required, for storing every button in array

   /* Do things */

   }
现在,循环运行后,
panel1
中的所有按钮都将存储在数组
ButtonArray
中,这样您就可以通过使其全局化,在类中的任何位置使用它

如果希望使用相同的事件(方法)处理所有按钮:选择表单中的每个按钮转到
属性
,然后在
事件
中,单击
属性,键入事件名称并按Enter键。

请提供您的代码。顺便说一句,我不建议在游戏中使用WinForms,尤其是那些一次需要在屏幕上显示多个按钮的游戏-这是因为每个按钮包装一个单独的
hWnd
,因此重新绘制很昂贵。我建议将WPF或单个
控件
子类与您自己的自定义绘制代码一起使用。。