1

我正在尝试为我正在制作的一个简单的数字猜谜游戏添加我的代码。一旦用户猜到正确的数字,就会弹出一个消息对话框,告诉他他是赢家。该消息对话框有一个名为“确定”的按钮,当我单击它时,我将返回表单。

相反,我希望它重新启动代码,以便生成一个新的随机数。这是可能的还是我需要手动将代码恢复到获胜者代码区域内的默认状态?

这是我现在的代码:

    private void btnEval_Click (object sender, EventArgs e)
    {
        // increment the counter to be displayed later
        howManyClicks++;



        // main decision conditions, ensures something is entered
        if (txtNum.Text != "")
        {
            // user input number
            double num = double.Parse (txtNum.Text);

            if (randomNumber > num)
            {
                // if too low
                this.BackColor = Color.Yellow;
                lblMain.Text = "TOO LOW!";
                lblReq.Text = "please try again";
                txtNum.Clear ();
                txtNum.Focus ();

            }
            else if (randomNumber < num)
            {
                // if too high
                this.BackColor = Color.Red;
                lblMain.Text = "TOO HIGH!";
                lblReq.Text = "please try again";
                txtNum.Clear ();
                txtNum.Focus ();
            }
            else
            {
                // correct
                this.BackColor = Color.Green;
                lblMain.Text = "CORRECT!";
                lblReq.Text = "well done";
                MessageBox.Show ("You are right!! It took you " + howManyClicks + " guesses", "You are a WINNER!!",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                txtNum.Clear ();
                txtNum.Focus ();
            }
        }
        else
        {
            MessageBox.Show ("You must enter a vaild number! Please try again.", "ERROR",
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            txtNum.Clear ();
            txtNum.Focus ();
        }
4

2 回答 2

2

显然,您的“游戏状态”(howManyClicks, randomNumber, ...)存储在表单的实例变量中。因此,您有以下选择:


将游戏状态提取到它自己的类中,并在表单中只保留对此类实例的引用:

GameState state;

当您开始或重新启动游戏时,只需指定new GameState()state重置表单的用户界面元素。


或者,您可以关闭并重新打开表单。您的主循环可能如下所示:

while (true) {
    var form = new GameForm();
    var result = form.ShowDialog(); // waits until the form as been closed

    if (result == DialogResult.Cancel) {
        break;  // The user wants to stop playing
    }
}

在您的游戏表单中,当OK单击按钮时,您设置Me.DialogResultDialogResult.OK然后关闭表单。外部循环将自动重新打开一个新的空游戏表单。

于 2013-04-16T05:29:59.793 回答
1

只需为此代码创建函数。

选择所有代码,然后右键单击它,选择第二个选项:Refactor

选择子选项:Extract a method

您可以为此公共方法命名。

然后你可以从任何地方调用这个方法,(正如你提到的重新启动代码)。

于 2013-04-16T04:59:40.653 回答