0

我有一个 if else 语句来确定用户是否赢得了我的井字游戏,但这是我的任务!:) 为了使代码更紧凑、更易于阅读,我有很多重复的代码块并减少了我拥有的代码量。

这是我的一些代码:

if (button1.Text == "X" & button2.Text == "X" & button3.Text == "X")
{
    foreach (Button button in addButton())
    {
        button1.BackColor = Color.Green;
        button2.BackColor = Color.Green;
        button3.BackColor = Color.Green;
        button.Enabled = false;
    }
}
else if (button1.Text == "X" & button4.Text == "X" & button7.Text == "X")
{
    foreach (Button button in addButton())
    {
        button1.BackColor = Color.Green;
        button4.BackColor = Color.Green;
        button7.BackColor = Color.Green;
        button.Enabled = false;
    }
}
else if (button1.Text == "X" & button5.Text == "X" & button9.Text == "X")
{
    foreach (Button button in addButton())
    {
        button1.BackColor = Color.Green;
        button4.BackColor = Color.Green;
        button7.BackColor = Color.Green;
        button.Enabled = false;
    }
}

我在想也许我可以把它放在一个私有方法中?但不确定你是否真的可以而且我不知道如何调用该方法,甚至是一个类?

4

2 回答 2

1

试试这个:

Button[] greenButtons = new Button[0]; // buttons to color in green
bool enabled = true; // value of Enabled for each of addButtons() to set

if (button1.Text == "X" & button2.Text == "X" & button3.Text == "X")
{
    greenButtons = new[] { button1, button2, button3 };
    enabled = false;
}
else if (button1.Text == "X" & button4.Text == "X" & button7.Text == "X")
{
    greenButtons = new[] { button1, button4, button7 };
    enabled = false;
}
else if (button1.Text == "X" & button5.Text == "X" & button9.Text == "X")
{
    greenButtons = new[] { button1, button4, button7 };
    enabled = false;
}

foreach (Button button in addButton())
{
    button.Enabled = enabled;
}
foreach (Button button in greenButtons)
{
    button.BackColor = Color.Green;
}
于 2013-01-24T02:22:11.957 回答
1

使用底层数据模型来表示您的数据。假设一个整数数组。

int[,] board  = new int[,] {{0,0,0}, {0,0,0},{0,0,0}};

然后,无论何时X播放 an,都将数组中的该位置设置为 1。

每次播放 anO时,您都将位置设置为 -1。

要检查获胜者,您只需遍历获胜组合、交叉、向下和 2 个交叉模式,如果它们 = 3X则获胜,如果它们 = -3 则O获胜。

于 2013-01-24T02:24:47.643 回答