c# -如果3/9个按钮具有相同的文本,该条件为真

本文关键字:文本 条件 如果 9个 按钮 | 更新日期: 2023-09-27 18:15:47

我正在尝试在c#中制作一个基本的零点和交叉游戏。到目前为止,我已经使用按钮制作了网格,当它被按下时,文本会根据玩家的回合而变化。我卡住的部分是检查是否有任何玩家赢了,我写了这个,但它似乎没有做任何事情。

        private void Form1_Load(object sender, EventArgs e)
    {
        if (button1.Text == "X" && button5.Text == "X" && button9.Text == "X")
        {
            MessageBox.Show("Player", player_turntxt.Text + " wins");
            Application.Restart();
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        int Player_Turn = Convert.ToInt32(player_turntxt.Text);
        if (Player_Turn == 1)
        {
            button1.Text = "X";
            player_turntxt.Text = "2";
            button1.Enabled = false;
            return;
        }
        else
        {
            button1.Text = "O";
            player_turntxt.Text = "1";
            button1.Enabled = false;
            return;
        }

(Application.Restart ();只是检查它是否有效的临时方法。)这只是我要做的作为胜利条件的8个陈述之一,知道我哪里出错了吗?

更新:

        public void CheckForWinner(int x)
    {
        if (button1.Text == "X" && button5.Text == "X" && button9.Text == "X")
        {
            x = 1;
        }
        else if (button3.Text == "X" && button5.Text == "X" && button7.Text == "X")
        {
            x = 1;
        }
        else if (button1.Text == "X" && button4.Text == "X" && button7.Text == "X")
        {
            x = 1;
        }
        else if (button2.Text == "X" && button5.Text == "X" && button8.Text == "X")
        {
            x = 1;
        }
        else if (button3.Text == "X" && button6.Text == "X" && button9.Text == "X")
        {
            x = 1;
        }
        else if (button1.Text == "X" && button2.Text == "X" && button3.Text == "X")
        {
            x = 1;
        }
        else if (button4.Text == "X" && button5.Text == "X" && button6.Text == "X")
        {
            x = 1;
        }
        else if (button7.Text == "X" && button8.Text == "X" && button9.Text == "X")
        {
            x = 1;
        }

        if (button1.Text == "O" && button5.Text == "O" && button9.Text == "O")
        {
            x = 2;
        }
        else if (button3.Text == "O" && button5.Text == "O" && button7.Text == "O")
        {
            x = 2;
        }
        else if (button1.Text == "O" && button4.Text == "O" && button7.Text == "O")
        {
            x = 2;
        }
        else if (button2.Text == "O" && button5.Text == "O" && button8.Text == "O")
        {
            x = 2;
        }
        else if (button3.Text == "O" && button6.Text == "O" && button9.Text == "O")
        {
            x = 2;
        }
        else if (button1.Text == "O" && button2.Text == "O" && button3.Text == "O")
        {
            x = 2;
        }
        else if (button4.Text == "O" && button5.Text == "O" && button6.Text == "O")
        {
            x = 2;
        }
        else if (button7.Text == "O" && button8.Text == "O" && button9.Text == "O")
        {
            x = 2;
        }

    }

c# -如果3/9个按钮具有相同的文本,该条件为真

你应该创建一个方法来检查是否有玩家获胜,并在每次"点击按钮"结束时运行它。

我也建议你从你的按钮点击中删除"返回"。它们有时会引入意想不到的行为,比如在执行调用该方法以检查是否有人获胜的代码行之前结束函数。

像这样:

private void button1_Click(object sender, EventArgs e)
    {
        int Player_Turn = Convert.ToInt32(player_turntxt.Text);
        if (Player_Turn == 1)
        {
            button1.Text = "X";
            player_turntxt.Text = "2";
            button1.Enabled = false;
        }
        else
        {
            button1.Text = "O";
            player_turntxt.Text = "1";
            button1.Enabled = false;
        }
CheckIfSomeoneHasWon();
}

让我们讨论一下CheckIfSomeoneHasWon的实现。我认为有几种方法可以做到这一点。我们可以用按钮的值创建一个二维数组,并迭代它。事实上,我会这样做。你的方法也可以,但我们得写很多东西。这是我想出来的:

static readonly string _player1_symbol = "X";
        static readonly string _player2_symbol = "O";
 static void CheckIfSomeoneHasWon()
        {
            string[,] userChoices = BuildUserChoices();
            string winner = CheckWhoWon(userChoices);
            if (winner != null)
            {
                // Somebody won! Display message and start over
            }
        }
        private static string CheckWhoWon(string[,] values)
        {
            // Horizontal checks
            for (int i = 0; i < 3; i++)
            {
                if (values[i, 0] == values[i, 1] && values[i, 1] == values[i, 2])
                {
                    return (values[i, 0] == _player1_symbol) ? "player 1" : "player 2";
                }
            }
            // Vertical checks
            for (int i = 0; i < 3; i++)
            {
                if (values[0, i] == values[1, i] && values[1,i] == values[2,i])
                {
                    return (values[i, 0] == _player1_symbol) ? "player 1" : "player 2";
                }
            }
            // Diagonal checks
            if (values[0, 0] == values[1, 1] && values[1, 1] == values[2, 2])
            {
                return (values[0, 0] == _player1_symbol) ? "player 1" : "player 2";
            }
            if (values[0, 2] == values[1, 1] && values[1, 1] == values[2, 0])
            {
                return (values[1, 1] == _player1_symbol) ? "player 1" : "player 2";
            }
            // No one has won yet
            return null;
        }
        private static string[,] BuildUserChoices()
        {
            var values = new string[3, 3];
            values[0, 0] = button1.Text;
            values[0, 1] = button2.Text;
            values[0, 2] = button3.Text;
// and so on...
            // If a button has not been click, they must have a unique text, like a number
            return values;
        }

你需要在每个回合后检查玩家是否获胜。现在你只需要在表单加载后检查一次