做空多头 if 语句

本文关键字:if 语句 | 更新日期: 2023-09-27 17:55:41

我花了几个小时制作一个井字游戏,主要使用if else语句,我只是复制和粘贴了一些代码......

我如何只创建代码的一个实例,然后稍后引用它? - 当我需要该代码时,而不是每次都复制和粘贴大量代码行。在这个代码块中,我得到一个介于 1 到 10 之间的随机数,这个数字将存储在 RI 中......然后,当轮到Ai时,计算机将在按钮中随机输入一个X,然后使用此代码进行检查以确定计算机是否获胜。我希望这是有道理的=)

do
{
    storeRI = rc.Next(0, 10); //storing random number into storeRI so it can be used later on in life. 
    if (storeRI == 1 && btn1.Text == "")
    {
        btn1.Text = "X";
        Turn = 1;
        if (btn1.Text == "X" & btn2.Text == "X" & btn3.Text == "X")
        {
            btn1.BackColor = Color.Green;
            btn2.BackColor = Color.Green;
            btn3.BackColor = Color.Green;
            XScore += 1;
            lblPScoreX.Text = XScore.ToString();
            foreach (Button btn in buttonList)
                 btn.Enabled = false;
        }
        else if (btn1.Text == "X" & btn4.Text == "X" & btn7.Text == "X")
        {
             btn1.BackColor = Color.Green;
             btn4.BackColor = Color.Green;
             btn7.BackColor = Color.Green;
             XScore += 1;
             lblPScoreX.Text = XScore.ToString();
             foreach (Button btn in buttonList)
                btn.Enabled = false;
        }
    }
}

例如,这段代码是一些代码,我已经复制了至少 10 次,它只会让我的代码看起来很丑陋,真的很难阅读。

做空多头 if 语句

例如,这段代码是我至少复制了 10 次的一些代码

每次复制代码时,都应尝试将其移动到方法中。 然后,可以直接调用该方法。 在您的情况下,一种方法可以轻松接受要影响的三个按钮,并直接处理它们。

   bool TestWin(Button btnA, Button btnB, button btnC)
   {
           if (btnA.Text == "X" & btnB.Text == "X" & btnC.Text == "X")
           {
                    btnA.BackColor = Color.Green;
                    btnB.BackColor = Color.Green;
                    btnC.BackColor = Color.Green;
                    XScore += 1;
                    lblPScoreX.Text = XScore.ToString();
                    foreach (Button btn in buttonList)
                    {
                         btn.Enabled = false;
                    }
                    return true;
           }
           return false;
     }

     if (!TestWin(btn1, btn2, btn3))
           TestWin(btn1, btn4, btn7);

您可能想要研究的重构技术是 合并重复的条件片段

if (btn1.Text == "X" & btn2.Text == "X" & btn3.Text == "X")
{
    btn2.BackColor = Color.Green;
    btn3.BackColor = Color.Green;
}
else if (btn1.Text == "X" & btn4.Text == "X" & btn7.Text == "X")
{
    btn4.BackColor = Color.Green;
    btn7.BackColor = Color.Green;
}
else
{
    return/break/continue; // hard to tell which you what as you have a do without a corresponding while
}
btn1.BackColor = Color.Green;
XScore += 1;
lblPScoreX.Text = XScore.ToString();
foreach (Button btn in buttonList)
{
    btn.Enabled = false;
}
if (btn1.Text == "X")
{
    btn1.BackColor = Color.Green;
    if(btn2.Text == "X" & btn3.Text == "X")
        btn2.BackColor = Color.Green;
        btn3.BackColor = Color.Green;
    }
    else if (btn4.Text == "X" & btn7.Text == "X")
    {
        btn4.BackColor = Color.Green;
        btn7.BackColor = Color.Green;
    }
    XScore += 1;
    lblPScoreX.Text = XScore.ToString();
    foreach (Button btn in buttonList)
    {
        btn.Enabled = false;
    }
}

长 if else 语句没有错;拥有长可读代码比短而难以管理的代码更好。

我可以看到的可能有帮助的一件事是添加一个方法(更改了一些以匹配您的类型):

public void ChangeButtonColor(Color thisColor, params Button[] buttons)
{
    foreach (Button thisButton in buttons)
    {
        thisButton.BackColor = thisColor
    }
}

然后,您只需添加代码:

ChangeButtonColor(Color.Green, btn1, btn2, btn3);

这将为您节省一些重复的代码。