我正在尝试为我正在制作的一个简单的猜数游戏调整我的代码。一旦用户猜出正确的号码,就弹出一个消息对话框,告诉他他是胜利者。
当我点击它时,该消息对话框有一个名为“ok”的按钮。相反,我希望它重新启动代码,以便生成一个新的随机数。这是可能的还是我需要手动将代码恢复到赢家代码区域内的默认状态?
现在是我的代码:
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 ();
}
答案 0 :(得分: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.DialogResult
设置为DialogResult.OK
,然后关闭表单。外部循环将自动重新打开一个新的空游戏形式。
答案 1 :(得分:1)
只需为此代码创建函数。
选择所有代码,然后右键单击它,选择第二个选项:Refactor
选择子选项:Extract a method
。
您可以为此公开方法命名。
然后你可以从任何地方调用这个方法,(正如你提到的那样重启代码)。