检查按钮的颜色并使用2D数组更改它

时间:2012-12-28 00:44:42

标签: c# arrays winforms visual-studio-2010 multidimensional-array

我正在制作一款小型游戏,就像Reversi / Othello游戏一样,我设法用按钮创建了一个2x3板。

按钮改变了你点击它们的颜色,但是我无法检测到两种黑色之间是否有白色,如果是这样,那么将白色变成黑色......我希望这是有意义的。按钮位于2D阵列中。任何可以帮助我这样做的建议都会非常感激。

图片:

enter image description here 这是我的代码:

![namespace reversitest
{
    public partial class Form1 : Form
    {

        private Button\[,\] squares;
        public Form1()
        {
            InitializeComponent();

            squares = new Button\[3, 2\];
            squares = new Button\[,\] {{button1,  button2,  button3},
                {button4,  button5,  button6,}};
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (Button sqrr in squares)
            {
                sqrr.Click += new System.EventHandler(this.DrawCharacter);
            }
        }
        int _turn = 0;
        private void DrawCharacter(object sender, EventArgs e)
        {
            Button sqrr = (Button)sender;
            int col = 0;

            if (sqrr.BackColor.Equals(Color.Black) || sqrr.BackColor.Equals(Color.White))
            {
                MessageBox.Show("Move Not Allowed!");
            }
            else 
            {
               for ( int i = 0; i < squares.GetLongLength(1); ++i)
               {

                  // check othere squares and change color
                   if (i < 2)
                   {
                       for (int f = 0; f < 3; ++f)
                       {
                           var ss = squares\[i, f\];
                           if (ss.BackColor.Equals(Color.Black))
                           {

                               MessageBox.Show("we have a black");

                               //ss = squares\[i, f+1\];
                               ss.BackColor = Color.Black;

                           }
                           else
                           {
                               MessageBox.Show("no black");
                           } 
                       }

                   }

                       if (_turn == 0)
                       {
                           _turn = 1;
                           sqrr.BackColor = Color.Black;


                       }
                       else
                       {
                           _turn = 0;
                           sqrr.BackColor = Color.White;


                       } 

               }


            }


        }
    }
}

3 个答案:

答案 0 :(得分:2)

首先使用数组索引命名按钮。它可以帮助您找到按钮 例如根据你的图片button1名称将是btn_1_1。

然后在按钮点击事件中首先获取按钮名称,然后识别定位的按钮。

        Button b = sender as Button;
        string[] btnData = b.Name.Split('_');
        int x = int.Parse(btnData[1]);
        int y = int.Parse(btnData[2]);

        //check for possible combinations 
        int top = y - 2;
        int botton = y + 2;

        int left = x - 2;
        int right = x + 2;

        if (top >= 0 && squares[top, y].Background == Color.Black)
        {
            squares[top+1, y].Background = Color.Black;
        }  
        ...  
        ...   

继续那样。如果您需要更多细节,请随意询问。

答案 1 :(得分:1)

最终答案

//check for possible combinations 
            int top = x - 2;
            int botton = x + 2;

            int left = y - 2;
            int right = y + 2;

            if (top >= 0 && squares[top, y].BackColor == Color.Black)
            {
                squares[top + 1, y].BackColor = Color.Black;
            }
            else if (left >= 0 && squares[x, left].BackColor == Color.Black)
            {
                squares[x, left + 1].BackColor = Color.Black;
            }

            else if (left >= 0 && squares[x, left].BackColor == Color.Black)
            {
                squares[x, left + 1].BackColor = Color.Black;
            }

稍后将延伸至8x8电路板

答案 2 :(得分:0)

你需要优雅吗?一种蛮力方法:您可以检查8个不同方向的碎片,使它们对齐。例如,你从黑色片开始。在一个方向检查下一块。如果它是白色的,继续前进并记下白色的位置,以便稍后将其更改为黑色。当你最终击中黑色部分时,将所有存储的位置更改为黑色并继续向下一个方向并重复该过程,直到完成所有8个方向。