簡體   English   中英

每當點擊事件句柄執行時,隨機數都會重置

[英]Random number resets every time click event handle executes

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM