步骤 2:创建随机加法问题

测验需要包含数学问题。如果测验重复相同的问题,那么它将不会具有任何挑战性,因此您希望包含随机数。您添加一个名为 StartTheQuiz() 的方法,此方法可填入问题并启动倒计时计时器。在此步骤中,您将添加随机加法问题。在本教程的后续步骤中将添加其他数学问题和倒计时计时器。

在教程 2 中,您为迷宫游戏创建了多个 SoundPlayer。您将为数学测验执行相同的操作,只不过您使用的是 Random 类,而不是 SoundPlayer 类。

创建随机加法问题

  1. 使用 new 语句创建一个 Random 对象,如下所示。

    Public Class Form1
    
        ' Create a Random object to generate random numbers.
        Private 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) 变量(与添加称作“randomizer”**的 Random 对象的方式一样),如下所示。

    ' Create a Random object to generate random numbers.
    Private randomizer As New Random
    
    ' These Integers will store the numbers
    ' for the addition problem.
    Private addend1 As Integer
    Private 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。在执行此方法中的前两个语句后,这两个 int (Integer) 变量(即 addend1 和 addend2)都将包含一个介于 0 和 50 之间的随机数。

    详细了解这些语句。

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

    这些语句将设置两个加号标签(即**“plusLeftLabel”“plusRightLabel”)的“Text”**属性,以使二者能够显示两个随机数。由于 Label 控件仅显示文本,而不是数字,因此您需要使用 int (Integer) 变量的 ToString() 方法将它转换为文本(在编程中,字符串表示文本)。

  5. 如果您希望通过**“开始”按钮来启动测验,请转到 Windows 窗体设计器,并双击此按钮以添加“Click”**事件处理程序。然后添加以下两个语句。

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

    您了解第一个语句:它调用新的 StartTheQuiz() 方法。第二个语句设置 开关 控件 启用 属性设置为 错误。这将禁用此按钮,从而使用户无法单击它。这样一来,用户只能单击**“开始”**按钮一次。之后,此按钮将显示为灰色且不可用,用户必须在时间用完之前完成测试(或关闭程序)。

  6. 此时,保存并运行程序。单击**“开始”**按钮。这将显示一个随机加法问题,如下图所示。

    随机加法问题

    随机加法问题

继续或查看