2

我正在创建一个小游戏,就像游戏 Reversi/Othello 我已经设法创建了一个带有按钮的 2x3 棋盘。

这些按钮会更改您单击它们的颜色,但我无法检测两种黑色之间是否有白色,如果有,请将白色变为黑色。我希望这是有道理的。按钮位于二维数组中。任何可以帮助我做到这一点的建议将不胜感激。

图片:

在此处输入图像描述 这是我的代码:

![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;


                       } 

               }


            }


        }
    }
}
4

3 回答 3

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;
        }  
        ...  
        ...   

继续这样。如果您需要更多详细信息,请随时询问。

于 2012-12-31T05:26:53.533 回答
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 板

于 2013-01-03T18:56:52.223 回答
0

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

于 2012-12-28T03:38:46.967 回答