Sdílet prostřednictvím


Krok 6: Přidání časovače

Dále přidejte časovač porovnávací hře.

Přidat časovač

  1. Přejděte do panelu v Návrháři formulářů.Dvakrát klikněte na Časovač (v kategorii Komponenty) a přidejte časovač do formuláře s jeho ikonou zobrazující se v šedém poli pod formulářem, jak je znázorněno na následujícím obrázku.

    Časovač

    Časovač

  2. Klepněte na ikonu timer1 k výběru časovače.Nastavte vlastnost Interval na hodnotu 750, ale ponechejte vlastnost Enabled nastavenu na hodnotu False.Vlastnost Interval sděluje časovači dobu čekání mezi okamžiky, takže toto říká časovači, aby čekal tři čtvrtiny sekundy (750 milisekund) před vyvoláním první události Tick.Nechcete, aby se časovač spustil při spuštění programu.Místo toho použijte metodu Start() ke spuštění časovače, když hráč klikne na druhou jmenovku.

  3. Dvakrát klikněte na ikonu ovládacího prvku Časovač v Návrháři formulářů pro přidání obslužné rutiny události Tick, jak ukazuje následující kód.

    ''' <summary>
    ''' This timer is started when the player clicks 
    ''' two icons that don't match,
    ''' so it counts three quarters of a second 
    ''' and then turns itself off and hides both icons
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub Timer1_Tick() Handles Timer1.Tick
    
        ' Stop the timer
        Timer1.Stop()
    
        ' Hide both icons
        firstClicked.ForeColor = firstClicked.BackColor
        secondClicked.ForeColor = secondClicked.BackColor
    
        ' Reset firstClicked and secondClicked 
        ' so the next time a label is
        ' clicked, the program knows it's the first click
        firstClicked = Nothing
        secondClicked = Nothing
    
    End Sub
    
    /// <summary>
    /// This timer is started when the player clicks 
    /// two icons that don't match,
    /// so it counts three quarters of a second 
    /// and then turns itself off and hides both icons
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void timer1_Tick(object sender, EventArgs e)
    {
        // Stop the timer
        timer1.Stop();
    
        // Hide both icons
        firstClicked.ForeColor = firstClicked.BackColor;
        secondClicked.ForeColor = secondClicked.BackColor;
    
        // Reset firstClicked and secondClicked 
        // so the next time a label is
        // clicked, the program knows it's the first click
        firstClicked = null;
        secondClicked = null;
    }
    

    Obslužná rutina události značek zvládá tři věci: nejprve zastaví časovač voláním Stop() metoda.Potom použije dvě referenční proměnné firstClicked a secondClicked k získání dvou jmenovek, na které hráč kliknul a opět jejich ikony skryje.Nakonec resetuje referenční proměnné firstClicked a secondClicked na hodnotu null v jazyce Visual C# a Nothing v jazyce Visual Basic.Toto je důležité, protože to ukazuje, jak se program obnoví sám.Nyní nesleduje žádný ovládací prvek Label a je znovu připraven k prvnímu kliku hráče.

    [!POZNÁMKA]

    Objekt Timer má metodu Start(), která spustí časovač a metodu Stop(), která ho zastaví.Při nastavení vlastnosti časovače Enabled na hodnotu True v okně Vlastnosti se spustí tikání ihned po spuštění programu.Ale když jej ponecháte nastavený na hodnotu False, nespustí tikání až do zavolání metody Start().

    [!POZNÁMKA]

    Za normálních okolností časovač vyvolá událost Tick znovu a znovu a pomocí vlastnosti Interval určí počet milisekund k čekání mezi okamžiky.Mohli jste zaznamenat, jak je metoda časovače Stop() volána uvnitř události Tick.Toto vloží časovač do jednorázového režimu, takže při volání metody Start() čeká na jeho interval a vyvolá jednu událost Tick.

  4. Chcete-li vidět nový časovač v akci, přejděte k editoru kódu a přidejte následující kód k horní a dolní části metody obslužné rutiny události label_Click().(Přidáváte příkaz if na začátek a na spodní část tři příkazy, zbývající část metody zůstává stejná.)

    ''' <summary>
    ''' Every label's Click event is handled by this event handler
    ''' </summary>
    ''' <param name="sender">The label that was clicked</param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub label_Click(ByVal sender As System.Object, 
                            ByVal e As System.EventArgs) Handles Label9.Click, 
        Label8.Click, Label7.Click, Label6.Click, Label5.Click, Label4.Click,  
        Label3.Click, Label2.Click, Label16.Click, Label15.Click, Label14.Click, 
        Label13.Click, Label12.Click, Label11.Click, Label10.Click, Label1.Click
    
        ' The timer is only on after two non-matching 
        ' icons have been shown to the player, 
        ' so ignore any clicks if the timer is running
        If Timer1.Enabled Then Exit Sub
    
        Dim clickedLabel = TryCast(sender, Label)
    
        If clickedLabel IsNot Nothing Then
            ' If the clicked label is black, the player clicked
            ' an icon that's already been revealed --
            ' ignore the click
            If clickedLabel.ForeColor = Color.Black Then Exit Sub
    
            ' If firstClicked is Nothing, this is the first icon 
            ' in the pair that the player clicked, 
            ' so set firstClicked to the label that the player 
            ' clicked, change its color to black, and return
            If firstClicked Is Nothing Then
                firstClicked = clickedLabel
                firstClicked.ForeColor = Color.Black
                Exit Sub
            End If
    
            ' If the player gets this far, the timer isn't 
            ' running and firstClicked isn't Nothing, 
            ' so this must be the second icon the player clicked
            ' Set its color to black
            secondClicked = clickedLabel
            secondClicked.ForeColor = Color.Black
    
            ' If the player gets this far, the player 
            ' clicked two different icons, so start the 
            ' timer (which will wait three quarters of 
            ' a second, and then hide the icons)
            Timer1.Start()
        End If
    
    End Sub
    
    /// <summary>
    /// Every label's Click event is handled by this event handler
    /// </summary>
    /// <param name="sender">The label that was clicked</param>
    /// <param name="e"></param>
    private void label_Click(object sender, EventArgs e)
    {
        // The timer is only on after two non-matching 
        // icons have been shown to the player, 
        // so ignore any clicks if the timer is running
        if (timer1.Enabled == true)
            return;
    
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            // If the clicked label is black, the player clicked
            // an icon that's already been revealed --
            // ignore the click
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            // If firstClicked is null, this is the first icon
            // in the pair that the player clicked, 
            // so set firstClicked to the label that the player 
            // clicked, change its color to black, and return
            if (firstClicked == null)
            {
                firstClicked = clickedLabel;
                firstClicked.ForeColor = Color.Black;
                return;
            }
    
            // If the player gets this far, the timer isn't
            // running and firstClicked isn't null,
            // so this must be the second icon the player clicked
            // Set its color to black
            secondClicked = clickedLabel;
            secondClicked.ForeColor = Color.Black;
    
            // If the player gets this far, the player 
            // clicked two different icons, so start the 
            // timer (which will wait three quarters of 
            // a second, and then hide the icons)
            timer1.Start();
        }
    }
    

    Kód v horní části metody kontroluje, zda byl spuštěn časovač kontrolou vlastnosti Enabled.Tak zajistíte, že pokud hráč klikne na první a druhý ovládací prvek Label a spustí se časovač, kliknutím na třetí ovládací prvek nebude provádět žádné kroky.

    Kód v dolní části metody nastaví referenční proměnnou secondClicked, aby sledovala druhý ovládací prvekLabel, na který hráč kliknul a nastaví barvu ikony této jmenovky na černou, aby ji zviditelnila.Poté spustí časovač v jednorázovém režimu, takže čeká 750 milisekund a potom vyvolá událost Tick.Obslužná rutina události Tick časovače potom skryje dvě ikony a obnoví referenční proměnné firstClicked a secondClicked, takže je formulář připraven na hráčovo kliknutí na jinou ikonu.

  5. Uložte program a spusťte jej.Klikněte na ikonu a stane se viditelnou.

  6. Klikněte na jinou ikonu.Objeví se krátce, a pak zmizí obě ikony.Opakujte toto mnohokrát.Formulář nyní sleduje první a druhou ikonu, na které jste kliknuli, a používá časovač k pozastavení před provedením zmizení ikon.

Chcete-li pokračovat nebo znovu projít