Учебник. Добавление арифметических примеров в приложение WinForms с математическим тестом
В этой серии из четырех учебников вы создадите математический тест. Тест содержит четыре случайных арифметических примера, которые игрок должен решить в течение определенного времени.
Элементы управления используют код C# или Visual Basic. Во втором учебнике вам предстоит реализовать логику теста, добавив код для арифметических примеров на основе случайных чисел. Вы также создадите метод с именем StartTheQuiz()
для заполнения примеров.
В этом третьем учебнике вы научитесь следующему:
- Написание кода для создания случайных объектов для использования в арифметических примерах.
- Добавление обработчика событий для кнопки запуска.
- Напишите код для запуска теста.
Необходимые компоненты
Этот учебник построен на предыдущем, Создание приложения WinForms с математическим тестом. Если вы еще не прошли этот учебник, начните с него.
Создание задачи на сложение случайных чисел
В проекте Visual Studio выберите конструктор Windows Forms.
Выберите форму Form1.
В строке меню выберите Вид>Код. Откроется файл Form1.cs или Form1.vb (в зависимости от того, на каком языке вы программируете), отображая код, стоящий за формой.
Создайте объект Random, добавив инструкцию
new
в начале кода.
Важно!
Используйте элемент управления языка программирования в правом верхнем углу этой страницы, чтобы просмотреть фрагмент кода на C# или Visual Basic.
С помощью таких инструкцийnew
можно создавать кнопки, метки, панели, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms и даже формы. Эти элементы называются объектами.
При запуске программы запускается форма. Код программной части создает случайный объект и называет его randomizer.
Для теста требуются переменные для хранения случайных чисел, создаваемых для каждого арифметического примера. Перед использованием переменных их необходимо объявить, т. е. указать их имена и типы данных.
Добавьте в форму две целочисленные переменные и назовите их addend1 и addend2.
Примечание.
Целочисленная переменная в C# называется int, а в Visual Basic — Integer. В переменных этого типа можно хранить положительные и отрицательные числа в диапазоне от -2147483648 до 2147483647, причем это могут быть только целые числа, без десятичных знаков.
Для добавления целочисленной переменной используется синтаксис, похожий на тот, с помощью которого вы добавили объект Random, как показано в следующем коде.
Добавьте метод с именем
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.
Более внимательно ознакомимся с этими операторами.
Операторы задают свойства Text двух меток — plusLeftLabel и plusRightLabel — так, чтобы они отображали два случайных числа. Элементы управления Label отображают значения в текстовом формате, а в коде строки содержат текст. Каждый метод целого числа ToString()
преобразует целое число в текст, который может отображаться в метке.
Создание случайных примеров на вычитание, умножение и деление
Следующим шагом является объявление переменных и предоставление случайных значений для других арифметических примеров.
Добавьте целочисленные переменные для оставшихся примеров в форму после переменных с примером на сложение. Код должен выглядеть так, как показано ниже.
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;
Измените метод
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, а ответ в примере на деление не является дробным.
Добавление обработчика событий для кнопки запуска
В этом разделе вы добавите код для запуска теста при выборе кнопки запуска. Код, который выполняется в ответ на событие, например нажатие кнопки, называется обработчиком событий.
В конструкторе Windows Forms дважды щелкните кнопку Начать тест или выберите ее, а затем нажмите клавишу ВВОД. Отобразится код формы и новый метод.
Эти действия добавляют обработчик событий Click в кнопку запуска. Когда игрок нажмет на эту кнопку, приложение запустит код, который будет добавлен в этот новый метод.
Добавьте следующие два оператора, чтобы обработчик событий начал тест.
Первый оператор вызывает новый метод StartTheQuiz()
. Второй оператор устанавливает свойству Enabled элемента управления startButton значение false
, чтобы игрок не мог нажать кнопку в процессе теста.
Запустите приложение.
Сохраните код.
Запустите приложение и выберите Начать тест. Отображаются случайные арифметические примеры, как показано на следующем снимке экрана.
Следующие шаги
Перейдите к следующему учебнику, чтобы добавить таймер в математический тест и проверить ответы пользователя.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по