Sdílet prostřednictvím


Krok 3: Přidejte časovač odpočítávání

Ve třetí části tohoto kurzu přidáte časovač odpočítávání ke sledování počtu zbývajících sekund pro uživatele kvízu před dokončením.

[!POZNÁMKA]

Toto téma je součástí řady výukových programů o základních principech kódování.Přehled tutoriálu naleznete v tématu Tutoriál 2: Vytvoření matematického kvízu s časovým limitem.

Přidat časovač odpočítávání

  1. Přidejte celočíselnou proměnnou s názvem timeLeft, stejně jako při předchozí proceduře.Váš kód by měl vypadat takto.

    Public Class Form1
    
        ' Create a Random object called randomizer  
        ' to generate random numbers. 
        Private randomizer As New Random
    
        ' These integer variables store the numbers  
        ' for the addition problem.  
        Private addend1 As Integer 
        Private addend2 As Integer 
    
        ' This integer variable keeps track of the  
        ' remaining time. 
        Private timeLeft As Integer
    
    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;
    
        // This integer variable keeps track of the  
        // remaining time. 
        int timeLeft;
    

    Nyní budete potřebovat metodu, která ve skutečnosti vrátí počet sekund, jako je například časovač, což vyvolá událost po uplynutí doby, kterou zadáte.

  2. V okně návrhu přesuňte ovládací prvek Časovač z kategorie Komponenty na panelu nástrojů do formuláře.

    Ovládací prvek se zobrazí v šedé oblasti v dolní části okna návrhu.

  3. Ve formuláři vyberte ikonu timer1, kterou jste právě přidali, a nastavte její vlastnost Interval na 1000.

    Vzhledem k tomu, že hodnota intervalu jsou milisekund, hodnota 1000 způsobí, že událost Tick je vyvolána každou sekundu.

  4. Ve formuláři poklikejte na ovládací prvek Timer nebo jej vyberte a pak stiskněte klávesu Enter.

    Zobrazí se editor kódu a metoda obslužné rutiny události Tick, kterou jste právě přidali.

  5. Přidejte následující prohlášení do nové metody obslužné rutiny.

    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;
        }
    }
    

    Na základě toho, co jste přidali, každou sekundu časovač zkontroluje, zda čas vypršel, určením, zda je proměnná typu integer timeLeft větší než 0.Pokud je, doba stále trvá.Nejprve časovač odečte 1 z proměnné timeLeft a poté u ovládacího prvku timeLabel aktualizuje vlastnost Text k zobrazení počtu zbývajících sekund uživateli.

    Jestliže nezbývá žádný čas, časovač se zastaví a změní text ovládacího prvku timeLabel tak, že zobrazí hodnotu Čas vypršel! Okno se zprávou oznamuje, že kvíz skončil a odpověď je odhalena – v tomto případě přidáním addend1 a addend2.Vlastnost Povoleno ovládacího prvku startButton je nastavena na true tak, aby autor, který se účastní kvízu, mohl spustit další kvíz.

    Právě jste přidali příkaz if else, kterým programům sdělujete, aby se rozhodovaly.Příkaz if else vypadá následovně.

    [!POZNÁMKA]

    Následující příklad je pouze pro ilustraci. Nepřidávejte ho do projektu.

    If (something that your program will check) Then
        ' One or more statements that will run
        ' if what the program checked is true. 
    Else
        ' One or more statements that will run
        ' if what the program checked is false.
    End If
    
    if (something that your program will check)
    {
        // One or more statements that will run
        // if what the program checked is true. 
    }
    else
    {
        // One or more statements that will run
        // if what the program checked is false.
    }
    

    Prohlédněte si blíže příkaz, který jste přidali v bloku else k zobrazení odpovědi na úlohu sčítání.

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

    Příkaz addend1 + addend2 sečte hodnoty obou proměnných.První část (sum.Value) používá vlastnost Hodnota souhrnného ovládacího prvku NumericUpDown k zobrazení správné odpovědi.Stejnou vlastnost můžete použít později ke zkontrolování odpovědi kvízu.

    Uživatelé vyplňující kvíz mohou zadávat čísla snadněji pomocí ovládacího prvku NumericUpDown, což je důvod, proč ho použijete pro odpovědi na matematické úlohy.Všechny možné odpovědi jsou celá čísla od 0 do 100.Tím, že ponecháte výchozí hodnoty vlastností Minimální, Maximální a DecimalPlaces, zajistíte, že autoři kvízu nemohou zadat zadat desetinná čísla, záporná čísla nebo čísla, která jsou příliš vysoká. (Pokud jste chtěli povolit uživatelům vyplňujícím kvíz zadání hodnoty 3,141, ale nikoli 3,1415, můžete nastavit vlastnost DecimalPlaces na hodnotu 3.)

  6. Přidejte tři řádky na konec metody StartTheQuiz(), takže kód vypadá následovně.

    ''' <summary> 
    ''' Start the quiz by filling in all of the problem  
    ''' values and starting the timer.  
    ''' </summary> 
    ''' <remarks></remarks> 
    Public Sub 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
    
        ' Start the timer.
        timeLeft = 30
        timeLabel.Text = "30 seconds"
        Timer1.Start()
    
    End Sub
    
    /// <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;
    
        // Start the timer.
        timeLeft = 30;
        timeLabel.Text = "30 seconds"; 
        timer1.Start();
    }
    

    Nyní, když spustíte kvíz, nastaví se proměnná timeLeft na hodnotu 30 a změní vlastnost Text ovládacího prvku timeLabel na 30 sekund.Pak metoda Start() ovládacího prvku Timer (Časovač) spustí odpočítávání. (Kvíz zatím neprovádí kontrolu odpovědi – to přichází na řadu jako další.)

  7. Uložte svůj program, spusťte jej a pak zvolte tlačítko Start ve formuláři.

    Časovač spustí odpočet.Když čas vyprší, kvíz skončí a zobrazí se odpověď.Následující obrázek znázorňuje probíhající kvíz.

    Probíhající matematický kvíz

    Math kvízu v průběhu

Pokračování nebo kontrola