Учебник. Добавление арифметических примеров в приложение WinForms с математическим тестом

В этой серии из четырех учебников вы создадите математический тест. Тест содержит четыре случайных арифметических примера, которые игрок должен решить в течение определенного времени.

Элементы управления используют код C# или Visual Basic. Во втором учебнике вам предстоит реализовать логику теста, добавив код для арифметических примеров на основе случайных чисел. Вы также создадите метод с именем StartTheQuiz() для заполнения примеров.

В этом третьем учебнике вы научитесь следующему:

  • Написание кода для создания случайных объектов для использования в арифметических примерах.
  • Добавление обработчика событий для кнопки запуска.
  • Напишите код для запуска теста.

Необходимые компоненты

Этот учебник построен на предыдущем, Создание приложения WinForms с математическим тестом. Если вы еще не прошли этот учебник, начните с него.

Создание задачи на сложение случайных чисел

  1. В проекте Visual Studio выберите конструктор Windows Forms.

  2. Выберите форму Form1.

  3. В строке меню выберите Вид>Код. Откроется файл Form1.cs или Form1.vb (в зависимости от того, на каком языке вы программируете), отображая код, стоящий за формой.

  4. Создайте объект Random, добавив инструкцию new в начале кода.

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    

Важно!

Используйте элемент управления языка программирования в правом верхнем углу этой страницы, чтобы просмотреть фрагмент кода на C# или Visual Basic.

Programming language control for Microsoft Learn

С помощью таких инструкцийnew можно создавать кнопки, метки, панели, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms и даже формы. Эти элементы называются объектами.

При запуске программы запускается форма. Код программной части создает случайный объект и называет его randomizer.

Для теста требуются переменные для хранения случайных чисел, создаваемых для каждого арифметического примера. Перед использованием переменных их необходимо объявить, т. е. указать их имена и типы данных.

  1. Добавьте в форму две целочисленные переменные и назовите их addend1 и addend2.

    Примечание.

    Целочисленная переменная в C# называется int, а в Visual Basic — Integer. В переменных этого типа можно хранить положительные и отрицательные числа в диапазоне от -2147483648 до 2147483647, причем это могут быть только целые числа, без десятичных знаков.

    Для добавления целочисленной переменной используется синтаксис, похожий на тот, с помощью которого вы добавили объект Random, как показано в следующем коде.

    // Create a Random object called randomizer 
    // to generate random numbers.
    Random randomizer = new Random();
    
    // These integer variables store the numbers 
    // for the addition problem. 
    int addend1;
    int addend2;
    

  1. Добавьте метод с именем StartTheQuiz(). Этот метод использует метод объекта Random Next() для создания случайных чисел для меток. StartTheQuiz() в конечном итоге заполнит все примеры, а затем запустит таймер, поэтому добавьте эти сведения в общий комментарий. Функция должна выглядеть примерно следующим образом.

    /// <summary>
    /// Start the quiz by filling in all of the problems
    /// and starting the timer.
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        // Generate two random numbers to add.
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers
        // into strings so that they can be displayed
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control.
        // This step makes sure its value is zero before
        // adding any values to it.
        sum.Value = 0;
    }
    

При использовании метода Next() с объектом Random, например при вызове randomizer.Next(51), возвращается случайное число меньше 51 (от 0 до 50). Этот код вызывает randomizer.Next(51), чтобы два случайных числа складывались и получался ответ от 0 до 100.

Более внимательно ознакомимся с этими операторами.

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

Операторы задают свойства Text двух меток — plusLeftLabel и plusRightLabel — так, чтобы они отображали два случайных числа. Элементы управления Label отображают значения в текстовом формате, а в коде строки содержат текст. Каждый метод целого числа ToString() преобразует целое число в текст, который может отображаться в метке.

Создание случайных примеров на вычитание, умножение и деление

Следующим шагом является объявление переменных и предоставление случайных значений для других арифметических примеров.

  1. Добавьте целочисленные переменные для оставшихся примеров в форму после переменных с примером на сложение. Код должен выглядеть так, как показано ниже.

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    
        // These integer variables store the numbers 
        // for the addition problem. 
        int addend1;
        int addend2;
    
        // These integer variables store the numbers 
        // for the subtraction problem. 
        int minuend;
        int subtrahend;
    
        // These integer variables store the numbers 
        // for the multiplication problem. 
        int multiplicand;
        int multiplier;
    
        // These integer variables store the numbers 
        // for the division problem. 
        int dividend;
        int divisor;
    

  1. Измените метод StartTheQuiz(), добавив следующий код, начиная с комментария "Заполните пример на вычитание".

    /// <summary>
    /// Start the quiz by filling in all of the problem 
    /// values and starting the timer. 
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        // Generate two random numbers to add.
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers
        // into strings so that they can be displayed
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control.
        // This step makes sure its value is zero before
        // adding any values to it.
        sum.Value = 0;
    
        // Fill in the subtraction problem.
        minuend = randomizer.Next(1, 101);
        subtrahend = randomizer.Next(1, minuend);
        minusLeftLabel.Text = minuend.ToString();
        minusRightLabel.Text = subtrahend.ToString();
        difference.Value = 0;
    
        // Fill in the multiplication problem.
        multiplicand = randomizer.Next(2, 11);
        multiplier = randomizer.Next(2, 11);
        timesLeftLabel.Text = multiplicand.ToString();
        timesRightLabel.Text = multiplier.ToString();
        product.Value = 0;
    
        // Fill in the division problem.
        divisor = randomizer.Next(2, 11);
        int temporaryQuotient = randomizer.Next(2, 11);
        dividend = divisor * temporaryQuotient;
        dividedLeftLabel.Text = dividend.ToString();
        dividedRightLabel.Text = divisor.ToString();
        quotient.Value = 0;
    

В этом коде метод Next() класса Random используется несколько иначе, чем в примере на сложение. Когда методу Next() передается два значения, он выбирает случайное число, которое больше первого значения или равно ему и меньше второго значения.

С помощью метода Next() с двумя аргументами можно убедиться, что у примера на вычитания положительный ответ, ответ в примере на умножение не превышает 100, а ответ в примере на деление не является дробным.

Добавление обработчика событий для кнопки запуска

В этом разделе вы добавите код для запуска теста при выборе кнопки запуска. Код, который выполняется в ответ на событие, например нажатие кнопки, называется обработчиком событий.

  1. В конструкторе Windows Forms дважды щелкните кнопку Начать тест или выберите ее, а затем нажмите клавишу ВВОД. Отобразится код формы и новый метод.

    Эти действия добавляют обработчик событий Click в кнопку запуска. Когда игрок нажмет на эту кнопку, приложение запустит код, который будет добавлен в этот новый метод.

  2. Добавьте следующие два оператора, чтобы обработчик событий начал тест.

    private void startButton_Click(object sender, EventArgs e)
    {
        StartTheQuiz();
        startButton.Enabled = false;           
    }
    

Первый оператор вызывает новый метод StartTheQuiz(). Второй оператор устанавливает свойству Enabled элемента управления startButton значение false, чтобы игрок не мог нажать кнопку в процессе теста.

Запустите приложение.

  1. Сохраните код.

  2. Запустите приложение и выберите Начать тест. Отображаются случайные арифметические примеры, как показано на следующем снимке экрана.

    Screenshot that shows random values in all four math problems. The Start the quiz button appears dimmed.

Следующие шаги

Перейдите к следующему учебнику, чтобы добавить таймер в математический тест и проверить ответы пользователя.