每次执行单击事件句柄时,随机数都会重置



您好,我目前正在尝试使用 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.");
        }
    }

相关内容

最新更新