步驟 2:建立隨機加法問題
測驗需要數學問題。如果測驗一直重複相同的問題,就沒有挑戰性,所以您想要加入隨機數字。您加入一個稱為 StartTheQuiz() 的方法,此方法會填入問題並啟動倒數計時器。在這個步驟中,您加入隨機加法問題。在本教學課程稍後的步驟中會加入其他的數學問題和倒數計時器。
在教學課程 2 中,您已經為迷宮遊戲建立幾個 SoundPlayer。您對數學測驗也是這樣做,差別在於不是使用 SoundPlayer 類別,而是使用 Random 類別。
若要建立隨機加法問題
使用類似下列的 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,甚至是表單時,所建立的項目就稱為物件。稍後的教學課程會詳細說明這些物件的運作方式。
現在,當您啟動表單時,它會建立新的 Random 物件,並將它命名為 randomizer。就像 SoundPlayer 一樣,如果您進入方法並開始輸入 randomizer,再輸入一點 (.),[IntelliSense] 視窗隨即會開啟,顯示您可以呼叫之 Random 物件的所有方法。您可以使用 Next() 方法,如下所示。
Next 方法
呼叫 random.Next(50) 時,您會得到小於 50 (從 0 至 49) 的隨機數字。
緊接著,您將會建置方法來檢查答案,所以程式需要記住它已針對問題選擇哪些數字。將一個稱為 addend1 的整數 (在 C# 中稱為 int,在 Visual Basic 中稱為 Integer) 和一個稱為 addend2 的 int (Integer) 加入至表單 (就像您加入稱為 randomizer 的 Random 物件一樣),如下所示。
' 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 的任何數字。它只能儲存整數,不能儲存小數。
接下來,加入一個稱為 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 控制項只會顯示文字,而不會顯示數字。
您想要讓 [開始] 按鈕啟動測驗,請移至 [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]。這樣會停用按鈕,讓使用者無法按一下按鈕。如此一來,使用者只能按一次 [開始] 按鈕。之後,按鈕就會變成灰色而無法使用,而使用者必須在時間結束之前完成測驗 (或關閉程式)。
現在儲存並執行程式。按一下 [開始] 按鈕。應該會出現隨機加法問題,如下列圖片所示。
隨機加法問題
若要繼續或檢視
若要移到下一個教學課程步驟,請參閱步驟 3:加入倒數計時器。
若要回到上一個教學課程步驟,請參閱步驟 1:建立專案並將標籤加入至表單。