您好,我目前正在尝试使用 c# 中的 Windows 表单应用程序制作猜谜游戏。我不知道如何做到这一点,所以我的随机数只生成一次。例如,每次我点击我的猜测按钮(如guessButton_Click所示(时,它都会生成一个不同的随机数。我只希望在此代码运行期间只生成一次随机数。我怎样才能做到这一点?任何帮助将不胜感激!
public partial class randomNumberForm : Form
{
Random ranNum = new Random();
int userGuess = 0;
int numberOfGuesses = 0;
public randomNumberForm()
{
InitializeComponent();
}
public void randomNumberForm_Load(object sender, EventArgs e)
{
}
public void guessButton_Click(object sender, EventArgs e)
{
int randomNumber = ranNum.Next(101) + 1;
if (int.TryParse(inputTextBox.Text, out userGuess))
{
if (userGuess < randomNumber)
{
answerLabel.Text = "Too low, try again.";
numberOfGuesses++;
guessLabel.Text = numberOfGuesses.ToString();
}
else if (userGuess > randomNumber)
{
answerLabel.Text = "Too high, try again.";
numberOfGuesses++;
guessLabel.Text = numberOfGuesses.ToString();
}
else if (userGuess == randomNumber)
{
answerLabel.Text = "You guessed the right number!";
numberOfGuesses++;
guessLabel.Text = numberOfGuesses.ToString();
}
}
else
{
MessageBox.Show("Please enter a valid integer.");
}
}
查看您放置行int randomNumber = ranNum.Next(101) + 1;
的位置 - 这是按钮单击事件执行的第一件事,并且每次单击按钮时都会运行。
将类顶部的 randomNumber
变量声明为私有 int。这将使它成为一个只能从类本身内部访问的类变量。
将代码行randomNumber = ranNum.Next(101) + 1;
移动到randomNumberForm_Load
函数中。这将填充表单加载事件上的randomNumber
变量。
您必须有一个全局变量。
请参阅下面的示例
public partial class randomNumberForm : Form
{
Random ranNum = new Random();
int userGuess = 0;
int numberOfGuesses = 0;
int? randomNumber;
public randomNumberForm()
{
InitializeComponent();
}
public void randomNumberForm_Load(object sender, EventArgs e)
{
}
public void guessButton_Click(object sender, EventArgs e)
{
if (!randomNumber.HasValue) // first time run
randomNumber = ranNum.Next(101) + 1;
if (int.TryParse(inputTextBox.Text, out userGuess))
{
if (userGuess < randomNumber)
{
answerLabel.Text = "Too low, try again.";
numberOfGuesses++;
guessLabel.Text = numberOfGuesses.ToString();
}
else if (userGuess > randomNumber)
{
answerLabel.Text = "Too high, try again.";
numberOfGuesses++;
guessLabel.Text = numberOfGuesses.ToString();
}
else if (userGuess == randomNumber)
{
answerLabel.Text = "You guessed the right number!";
numberOfGuesses++;
guessLabel.Text = numberOfGuesses.ToString();
}
}
else
{
MessageBox.Show("Please enter a valid integer.");
}
}