共用方式為


步驟 2:建立隨機加法問題

測驗需要數學問題。如果測驗一直重複相同的問題,就沒有挑戰性,所以您想要加入隨機數字。您加入一個稱為 StartTheQuiz() 的方法,此方法會填入問題並啟動倒數計時器。在這個步驟中,您加入隨機加法問題。在本教學課程稍後的步驟中會加入其他的數學問題和倒數計時器。

在教學課程 2 中,您已經為迷宮遊戲建立幾個 SoundPlayer。您對數學測驗也是這樣做,差別在於不是使用 SoundPlayer 類別,而是使用 Random 類別。

若要建立隨機加法問題

  1. 使用類似下列的 new 陳述式,建立 Random 物件。

    Public Class Form1
    
        ' Create a Random object to generate random numbers.
        Dim randomizer As New Random
    
    public partial class Form1 : Form
    {
        // Create a Random object to generate random numbers.
        Random randomizer = new Random();
    

    您現在已將 Random 物件加入至表單,並將它命名為 randomizer

    注意事項注意事項

    在迷宮教學課程中,您已使用 new 陳述式建立兩個 SoundPlayer 元件。這裡會使用類似的做法。與 SoundPlayer 的唯一差別在於 Random 不是元件,也不是控制項,所以不能以這些名稱來稱呼。它稱為物件。您以前或許聽過物件這個名詞,在接下來幾個教學課程中,您將進一步了解其意義。現在,您只需要知道當程式使用 new 陳述式建立按鈕、標籤、面板、OpenFileDialog、ColorDialog、SoundPlayer、Random,甚至是表單時,所建立的項目就稱為物件。稍後的教學課程會詳細說明這些物件的運作方式。

  2. 現在,當您啟動表單時,它會建立新的 Random 物件,並將它命名為 randomizer。就像 SoundPlayer 一樣,如果您進入方法並開始輸入 randomizer,再輸入一點 (.),[IntelliSense] 視窗隨即會開啟,顯示您可以呼叫之 Random 物件的所有方法。您可以使用 Next() 方法,如下所示。

    Next 方法

    Next 方法

    呼叫 random.Next(50) 時,您會得到小於 50 (從 0 至 49) 的隨機數字。

  3. 緊接著,您將會建置方法來檢查答案,所以程式需要記住它已針對問題選擇哪些數字。將一個稱為 addend1 的整數 (在 C# 中稱為 int,在 Visual Basic 中稱為 Integer) 和一個稱為 addend2 的 int (Integer) 加入至表單 (就像您加入稱為 randomizerRandom 物件一樣),如下所示。

    ' Create a Random object to generate random numbers.
    Dim randomizer As New Random
    
    ' These Integers will store the numbers
    ' for the addition problem.
    Dim addend1 As Integer
    Dim addend2 As Integer
    
    // Create a Random object to generate random numbers.
    Random randomizer = new Random();
    
    // These ints will store the numbers
    // for the addition problem.
    int addend1;
    int addend2;
    
    注意事項注意事項

    int (Integer) 可用來儲存正數或負數值。它可以保存從 -2147483648 至 2147483647 的任何數字。它只能儲存整數,不能儲存小數。

  4. 接下來,加入一個稱為 StartTheQuiz() 的方法,此方法使用 Random 物件 Next() 方法來選擇兩個數字,並將數字放在標籤中。它最後會填入所有問題,然後啟動計時器,所以請加入註解。其外觀應如下。

    ''' <summary>
    ''' Start the quiz by filling in all of the problems
    ''' and starting the timer.
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub StartTheQuiz()
        ' Fill in the addition problem.
        addend1 = randomizer.Next(51)
        addend2 = randomizer.Next(51)
    
        plusLeftLabel.Text = addend1.ToString
        plusRightLabel.Text = addend2.ToString
    
        sum.Value = 0
    End Sub
    
    /// <summary>
    /// Start the quiz by filling in all of the problems
    /// and starting the timer.
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        sum.Value = 0;
    }
    
    注意事項注意事項

    請注意您已呼叫 randomizer.Next(51)。使用 51 而不是 50 的原因是為了讓兩個數字相加等於 0 至 100 的答案。如果您將 50 傳給 Next() 方法,它會選擇 0 至 49 的數字,所以可能的最大答案是 98,而不是 100。當方法中的前兩個陳述式執行之後,addend1 和 addend2 這兩個 int (Integer) 會各自保存從 0 至 50 的隨機數字。

    仔細查看這些陳述式。

    plusLeftLabel.Text = addend1.ToString
    plusRightLabel.Text = addend2.ToString
    
    plusLeftLabel.Text = addend1.ToString();
    plusRightLabel.Text = addend2.ToString();
    

    陳述式會設定 [plusLeftLabel] 和 [plusRightLabel] 這兩個加號標籤的 [Text] 屬性,讓標籤能夠顯示兩個隨機數字。您需要使用 int (Integer) 的 ToString() 方法,將它轉換為文字 (在程式中,「字串」(String) 代表文字),因為 Label 控制項只會顯示文字,而不會顯示數字。

  5. 您想要讓 [開始] 按鈕啟動測驗,請移至 [Windows Form 設計工具],按兩下該按鈕加入 Click 事件處理常式。接著,加入下列兩個陳述式。

    Private Sub startButton_Click() Handles startButton.Click
        startButton.Enabled = False
        StartTheQuiz()
    End Sub
    
    private void startButton_Click(object sender, EventArgs e)
    {
        startButton.Enabled = false;
        StartTheQuiz();
    }
    

    您知道第二個陳述式的用途:它會呼叫新的 StartTheQuiz() 方法。第一個陳述式會將 startButton 控制項的 [Enabled] 屬性設定為 [False]。這樣會停用按鈕,讓使用者無法按一下按鈕。如此一來,使用者只能按一次 [開始] 按鈕。之後,按鈕就會變成灰色而無法使用,而使用者必須在時間結束之前完成測驗 (或關閉程式)。

  6. 現在儲存並執行程式。按一下 [開始] 按鈕。應該會出現隨機加法問題,如下列圖片所示。

    隨機加法問題

    隨機加法問題

若要繼續或檢視