我正在做一个猜谜游戏的家庭作业。用户试图猜测数字0-100。我是C#的新手,这只是我的第二个窗体。我正在尝试创建一个按钮事件,检查我的文本框是否为空白。如果它不是空白我需要它添加到一个计数器,一旦用户猜出正确的数字,一个窗口应该弹出说“你花了很多次尝试!”。 “这么多”是我的反击......我希望这是有道理的。在某些时候,我还需要确保用户只输入数字。我现在只想弄清楚这个计数器......到目前为止,这是我的代码。有一些代码被注释掉了。我完全迷失了。
public Form1()
{
InitializeComponent();
//Generates random number for game
Random rnd = new Random();
int rndNumber = rnd.Next(101);
this.number.Text = rndNumber.ToString();
}
//Makes sure user only enters numbers 0-100
private void guess_TextChanged(object sender, EventArgs e)
{
}
//does this when evaluate button is clicked
private void evaluate_Click(object sender, EventArgs e)
{
//counter for the number of guesses
int guessNumber;
guessNumber = 0;
if (string.IsNullOrEmpty(this.guess.Text))
{
MessageBox.Show("Must enter a number 0-100 to play");
// while (!string.IsNullOrEmpty(this.guess.Text))
// {
// guessNumber++;
// }
}
else
{
guessNumber++;
MessageBox.Show(guessNumber.ToString());
}
}
答案 0 :(得分:1)
您的evaluate_Click方法看起来很好。如果文本框为空,请告诉他们输入值。在else中 - 在递增计数器之前 - 检查它们是否先放入正确的值。如果他们没有输入正确的值 - 增加计数器。
你需要把"计数器"在课堂(表格)级别。如果你把它放在这样的事件中 - 它将有localscope,并且每次调用事件时都会重置为0。声明" guessNumber"在类级别变量并在事件中递增它,你应该全部设置。
答案 1 :(得分:0)
有一个范围在evaluate方法之外的变量。也许高于public Form1()
行。这样,它在类的本地范围内定义,而不仅仅是methd,以便所有方法都可以访问它。
启动evaluate方法后,在进一步处理之前立即递增计数器。所以你的代码看起来像是:
private void evaluate_Click(object sender, EventArgs e)
{
counter++;
if (!string.isEmptyOrNull(this.guess.text))
{
if (rndNumber == Int32.Parse(this.guess.text))
//Display you are correct
else
//Display guess again
}
}
答案 2 :(得分:0)
试试这个:
public partial class Form1 : Form
{
int guessNumber;
int rndNumber;
int userNumber;
public Form1()
{
InitializeComponent();
//Generates random number for game
Random rnd = new Random();
rndNumber = rnd.Next(101);
this.number.Text = rndNumber.ToString();
}
//does this when evaluate button is clicked
private void evaluate_Click(object sender, EventArgs e)
{
//counter for the number of guesses
if (string.IsNullOrWhiteSpace(this.guess.Text))
{
MessageBox.Show("Must enter a number 0-100 to play");
// while (!string.IsNullOrEmpty(this.guess.Text))
// {
// guessNumber++;
// }
}
else
{
guessNumber++;
userNumber = Convert.ToInt32(guess.Text);
if (userNumber == rndNumber)
{
MessageBox.Show("you took these many guesses = "+guessNumber.ToString());
}
else
{
MessageBox.Show("Invalid Guess Try Again!!!");
}
}
}
//Makes sure user only enters numbers 0-100
private void guess_TextChanged(object sender, EventArgs e)
{
var userInput=Convert.ToInt32(guess.Text);
if (!(userInput > 0 && userInput <= 100))
{
MessageBox.Show("enter number between 1 and 100");
guess.Text = userInput.ToString().Substring(0, userInput.ToString().Length - 1);
}
}
}
答案 3 :(得分:0)
仅对于文本框中的数字,您可以在TextBox KeyPress事件上尝试此代码
private void guess_KeyPress(object sender, EventArgs e)
{
e.Handled=!(Char.IsDigit(e.KeyChar));
//This will only allow numeric values in TextBox
}