Freigeben über


Schritt 3: Hinzufügen eines Countdownzeitgebers

Im dritten Teil dieses Lernprogramms fügen Sie einen Countdownzeitgeber hinzu, mit dem die Anzahl von Sekunden verfolgt wird, die verbleiben, bis der Quizteilnehmer das Quiz beendet.

HinweisHinweis

Dieses Thema ist Teil einer Reihe von Lernprogrammen zu grundlegenden Konzepte der Codierung.Eine Übersicht des Lernprogramms finden Sie unter Lernprogramm 2: Erstellen eines Mathequiz mit Zeitmessung.

So fügen Sie einen Countdownzeitgeber hinzu

  1. Fügen Sie wie in der vorherigen Prozedur eine Ganzzahlvariable mit dem Namen timeLeft hinzu.Der Code sollte wie folgt aussehen.

    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;
    

    Jetzt benötigen Sie eine Methode, die die Sekunden zählt, z. B. einen Zeitgeber, der nach Ablauf der angegebenen Zeit ein Ereignis auslöst.

  2. Verschieben Sie im Entwurfsfenster ein Zeitgeber-Steuerelement von der Kategorie Komponenten der Toolbox in das Formular.

    Das Steuerelement wird im grauen Bereich unten im Entwurfsfenster angezeigt.

  3. Wählen Sie im Formular auf das Symbol timer1 aus, das Sie gerade hinzugefügt haben, und legen Sie die Eigenschaft Interval auf 1000 fest.

    Da der Intervallwert in Millisekunden angegeben wird, verursacht der Wert 1000, dass das Tick-Ereignis jede Sekunde ausgelöst wird.

  4. Klicken Sie im Formular doppelt auf das Timer-Steuerelement, oder wählen Sie es aus, und wählen Sie dann die EINGABETASTE aus.

    Der Code-Editor wird mit der Methode für den Tick-Ereignishandler angezeigt, den Sie gerade hinzugefügt haben.

  5. Fügen Sie der neuen Ereignishandlermethode die folgenden Anweisungen hinzu.

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

    Basierend auf den hinzugefügten Anweisungen ermittelt der Zeitgeber jede Sekunde, ob die Zeit abgelaufen ist. Dazu wird geprüft, ob die Ganzzahlvariable timeLeft größer als 0 ist.Ist dies der Fall, verbleibt noch Zeit.Zuerst subtrahiert der Zeitgeber den Wert 1 von timeLeft und aktualisiert dann die Text-Eigenschaft des timeLabel-Steuerelements, damit für den Quizteilnehmer die Anzahl von verbleibenden Sekunden angezeigt wird.

    Wenn keine Zeit mehr übrig ist, wird der Zeitgeber angehalten und der Text des timeLabel-Steuerelements geändert, sodass Time's up! angezeigt wird. Ein Meldungsfeld gibt an, dass das Quiz beendet ist, und die Antwort wird angezeigt. In diesem Fall hat sie die Werte "addend1" und "addend2".Die Enabled-Eigenschaft des startButton-Steuerelements ist auf true festgelegt, sodass der Quizteilnehmer ein anderes Quiz beginnen kann.

    Sie haben gerade eine if else-Anweisung hinzugefügt, mit der Sie Programme zum Treffen von Entscheidungen auffordern können.Eine if else-Anweisung sieht wie folgt aus.

    HinweisHinweis

    Das folgende Beispiel dient nur der Veranschaulichung. Fügen Sie es nicht dem Projekt hinzu.

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

    Sehen Sie sich die Anweisung zum Anzeigen der Antwort auf die Additionsaufgabe, die Sie dem else-Block hinzugefügt haben, genauer an.

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

    Die Anweisung addend1 + addend2 fügt die Werte in den beiden Variablen zusammen hinzu.Im ersten Teil (sum.Value) wird die Value-Eigenschaft des NumericUpDown-Steuerelements "sum" verwendet, um die richtige Antwort anzuzeigen.Später verwenden Sie die gleiche Eigenschaft, um die Antworten für das Quiz zu überprüfen.

    Über das NumericUpDown-Steuerelement können die Quizteilnehmer einfacher Zahlen eingeben. Daher sollten Sie dieses Steuerelement für die Antworten auf die mathematischen Aufgaben verwenden.Alle möglichen Antworten sind ganze Zahlen von 0 bis 100.Wenn Sie die Standardwerte der Eigenschaften Minimum, Maximum und DecimalPlaces unverändert lassen, stellen Sie sicher, dass die Quizteilnehmer keine Dezimalwerte, negative Zahlen oder Zahlen eingeben können, die zu hoch sind. (Wenn Sie den Quizteilnehmern die Eingabe einer Zahl mit drei Dezimalstellen (z. B. 3,141) erlauben möchten, aber nicht die Eingabe einer Zahl mit vier Dezimalstellen (z. B. 3,1415), können Sie die DecimalPlaces-Eigenschaft auf 3 festlegen.)

  6. Fügen Sie dem Ende der StartTheQuiz()-Methode drei Zeilen hinzu, damit der Code wie folgt aussieht.

    ''' <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();
    }
    

    Wenn Sie das Quiz jetzt starten, wird die Variable timeLeft auf 30 und die Text-Eigenschaft des timeLabel-Steuerelements auf 30 Sekunden festgelegt.Dann wird der Countdown mit der Start()-Methode des Timer-Steuerelements gestartet. (Die Antwort wird noch nicht im Quiz geprüft – dies ist der nächste Schritt.)

  7. Speichern Sie das Programm, führen Sie es aus, und wählen Sie dann die Schaltfläche Start im Formular aus.

    Die Zeitgeber beginnt den Countdown.Wenn die Zeit abläuft, wird das Quiz beendet, und die Antwort wird angezeigt.In der folgenden Abbildung ist das laufende Quiz dargestellt.

    Laufendes Mathequiz

    Mathetest wird durchgeführt

So fahren Sie fort oder überprüfen die Angaben