步骤 2:创建随机加法问题
测验需要包含数学问题。如果测验重复相同的问题,那么它将不会具有任何挑战性,因此您希望包含随机数。您添加一个名为 StartTheQuiz() 的方法,此方法可填入问题并启动倒计时计时器。在此步骤中,您将添加随机加法问题。在本教程的后续步骤中将添加其他数学问题和倒计时计时器。
在教程 2 中,您为迷宫游戏创建了多个 SoundPlayer。您将为数学测验执行相同的操作,只不过您使用的是 Random 类,而不是 SoundPlayer 类。
创建随机加法问题
使用 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 和窗体时,所创建的项将被称作对象。后续教程将说明有关这些对象的工作原理的更多信息。
此时,当您启动窗体时,它将创建一个新的 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. 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 之间的任何数字。它只能存储整数,而不能存储小数。
接下来,添加一个称作 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() 方法将它转换为文本(在编程中,字符串表示文本)。
如果您希望通过**“开始”按钮来启动测验,请转到 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() 方法。第二个语句设置 开关 控件 启用 属性设置为 错误。这将禁用此按钮,从而使用户无法单击它。这样一来,用户只能单击**“开始”**按钮一次。之后,此按钮将显示为灰色且不可用,用户必须在时间用完之前完成测试(或关闭程序)。
此时,保存并运行程序。单击**“开始”**按钮。这将显示一个随机加法问题,如下图所示。
随机加法问题
继续或查看
若要转到下一个教程步骤,请参见步骤 3:添加一个倒计时计时器。
若要返回上一个教程步骤,请参见步骤 1:创建项目并向窗体添加标签。