Шаг 3. Добавление таймера с обратным отсчетом

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

Добавление таймера с обратным отсчетом

  1. Добавьте целое число int (Integer) с именем timeLeft также, как это выполнялось ранее.Код должен выглядеть так, как показано ниже.

    Public Class Form1
    
        ' 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
    
        ' This Integer will keep track of the time left.
        Private timeLeft As Integer
    
    public partial class Form1 : Form
    {
        // 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;
    
        // This int will keep track of the time left.
        int timeLeft;
    
  2. Теперь необходимо что-то, что фактически выполняет отсчет, например, таймер.Перейдите в конструктор Windows Forms и перетащите в форму с панели элементов (категория Компоненты) элемент управления Timer.Элемент управления будет расположен в серой области в нижней части конструктора Windows Forms.

  3. Щелкните по только что добавленному значку timer1 и установите для свойства Interval значение равное 1000.Это вызывает событие Tick каждую секунду.Чтобы добавить обработчик событий Tick, дважды щелкните по значку.Интегрированная среда разработки переключается на редактор кода и переходит к новому методу обработчика событий.Добавьте следующие операторы.

    Private Sub Timer1_Tick() Handles Timer1.Tick
    
        If timeLeft > 0 Then
            ' Display the new time left
            ' by updating the Time Left label.
            timeLeft -= 1
            timeLabel.Text = timeLeft & " seconds"
        Else
            ' If the user ran out of time, stop the timer, show
            ' a MessageBox, and fill in the answers.
            Timer1.Stop()
            timeLabel.Text = "Time's up!"
            MessageBox.Show("You didn't finish in time.", "Sorry")
            sum.Value = addend1 + addend2
            startButton.Enabled = True
        End If
    
    End Sub
    
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (timeLeft > 0)
        {
            // Display the new time left
            // by updating the Time Left label.
            timeLeft = timeLeft - 1;
            timeLabel.Text = timeLeft + " seconds";
        }
        else
        {
            // If the user ran out of time, stop the timer, show
            // a MessageBox, and fill in the answers.
            timer1.Stop();
            timeLabel.Text = "Time's up!";
            MessageBox.Show("You didn't finish in time.", "Sorry");
            sum.Value = addend1 + addend2;
            startButton.Enabled = true;
        }
    }
    

    В зависимости от указанного значения, таймер каждую секунду проверяет, истекло ли время путем проверки, больше ли значение целого числа int (Integer) с именем timeLeft чем 0.Если больше, то время еще осталось.Сначала таймер вычитает 1 из значения переменной timeLeft, затем он обновляет у элемента управления timeLabel свойство Text, чтобы показать пользователю, сколько секунд осталось.

    Если времени не осталось, таймер останавливается и меняется текст в элементе управления timeLabel, чтобы он показывал Time's up! (Время вышло!). Появляется окно сообщения, говорящее пользователю, что игра закончена.Показывается ответ — в данном случае результат сложения значений переменной addend1 и переменной addend2.Свойство Enabled у элемента управления startButton имеет значение true, чтобы кнопка была снова доступна.С помощью этого пользователь может начать игру повторно.

    Только что был добавлен оператор if else, в котором описывается, как программа принимает решение .Оператор if else представлен ниже.

    If (something your program will check) Then
        ' statements that will get executed
        ' if the thing that the program checked is true 
    Else
        ' statements that will get executed
        ' if the thing that the program checked is NOT true
    End If
    
    if (something your program will check)
    {
        // statements that will get executed
        // if the thing that the program checked is true 
    }
    else
    {
        // statements that will get executed
        // if the thing that the program checked is NOT true
    }
    

    Внимательно посмотрите в добавленном операторе на блок else, в котором показан ответ на задачу вычитание.

    sum.Value = addend1 + addend2
    
    sum.Value = addend1 + addend2;
    

    Как известно addend1 + addend2 выполняет сложение двух чисел вместе.Первая часть (sum.Value) использует свойство Value у элемента управления NumericUpDown, для отображения правильного ответа.Свойство Value также используется позднее, когда необходимо проверить ответы для головоломки.

    Элемент управления NumericUpDown упрощает для пользователя ввод чисел, поэтому этот элемент управления используется для ответов на математические задачи.Так как все возможные ответы, это числа из диапазона от 0 до 100, остаются значения свойств Minimum и Maximum по умолчанию равные 0 и 100.Это приводит к тому, что пользователь в таком элементе управления может ввести только значения из диапазона от 0 до 100.Так как ответами могут быть только целые числа, значение свойства DecimalPlaces устанавливается равным 0 — это значит, что пользователь не может вводить дробные числа.Если необходимо разрешить пользователю вводить число 3.141, но не число 3.1415, можно установить свойству DecimalPlaces значение равное 3.

  4. Добавьте три строки в конец метода StartTheQuiz(), чтобы код выглядел так, как показано ниже.

    ''' <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
    
        ' Start the timer.
        timeLeft = 30
        timeLabel.Text = "30 seconds"
        Timer1.Start()
    
    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;
    
        // Start the timer.
        timeLeft = 30;
        timeLabel.Text = "30 seconds"; 
        timer1.Start();
    }
    

    Теперь при запуске головоломки он устанавливает целому числу int (Integer) с именем timeLeft значение 30, и изменяет у элемента управления timeLabel свойство Text на значение равное 30 секундам.Затем, чтобы начать обратный отсчет, он вызывает у элемента управления Timer метод Start()(ответ он пока не проверяет — это будет сделано позже).

  5. Сохраните и выполните программу.При нажатии кнопки Пуск таймер должен начать обратный отсчет.Когда время истечет, игра закончится и появится ответ.На рисунке ниже показана головоломка в процессе игры.

    Математическая головоломка в процессе игры

    Опрос по математике выполняется

Продолжить или повторить пройденный материал