Sdílet prostřednictvím


Krátký kurz: Přidání referenčních proměnných a ovládacího prvku časovače do vaší odpovídající hry ve WinForms

V této sérii čtyř kurzů vytvoříte hru na párování, kde hráč páruje dvojice skrytých ikon.

Váš program pro hru Matching Game musí sledovat, které Label ovládací prvky si hráč vybere. Jakmile hráč vybere první štítek, program by měl zobrazit ikonu. Po zvolení druhého popisku by program měl po krátkou dobu zobrazit obě ikony. Potom skryje obě ikony.

Program sleduje, který štítek zvolíte jako první a který jako druhý, a to pomocí referenčních proměnných . Časovač skryje ikony a nastaví, jak dlouho se ikony mají zobrazovat.

  • Přidejte odkazy na štítky.
  • Přidejte časovač.

Požadavky

Tento kurz vychází z předchozích kurzů, Vytvořit odpovídající herní aplikaci a Přidat ikony do odpovídající hry. Nejprve dokončete tyto kurzy.

Přidání odkazů na štítky

V této části přidáte do kódu dvě referenční proměnné. Sledují nebo odkazují na objekty Label.

  1. Přidejte do formuláře odkazy na popisky pomocí následujícího kódu v Form1.cs nebo Form1.vb.

    public partial class Form1 : Form
    {
        // firstClicked points to the first Label control 
        // that the player clicks, but it will be null 
        // if the player hasn't clicked a label yet
        Label firstClicked = null;
    
        // secondClicked points to the second Label control 
        // that the player clicks
        Label secondClicked = null;
    

Pokud používáte C#, vložte kód za levou složenou závorku a těsně za deklaraci třídy (public partial class Form1 : Form). Pokud používáte Visual Basic, vložte kód hned za deklaraci třídy (Public Class Form1).

Tyto příkazy nezpůsobí, že se ve formuláři zobrazí prvky Popisek, protože nejsou žádná klíčová slova new. Při spuštění programu jsou firstClicked i secondClicked nastaveny na null pro jazyk C# nebo Nothing pro Visual Basic.

  1. Upravte obslužnou rutinu události Click v Form1.cs nebo Form1.vb tak, aby používala novou referenční proměnnou firstClicked. Odeberte poslední příkaz v metodě obslužné rutiny události label1_Click() (clickedLabel.ForeColor = Color.Black;) a nahraďte ho následujícím příkazem if.

    /// <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 label1_Click(object sender, EventArgs e)
    {
        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;
            }
        }
    }
    

  1. Uložte a spusťte program. Vyberte jeden z ovládacích prvků štítku a zobrazí se jeho ikona. Vyberte další prvek označení a všimněte si, že se nic nestane.

    Snímek obrazovky ukazuje hru odpovídající s jednou ikonou.

    Zobrazí se jenom první vybraná ikona. Ostatní ikony jsou neviditelné.

Program již sleduje první štítek, který hráč zvolil. Referenční firstClicked není null v jazyce C# nebo Nothing v jazyce Visual Basic. Když příkaz if zjistí, že firstClicked není roven null nebo Nothing, spustí příkazy.

Přidání časovače

Aplikace Matching Game používá ovládací prvek Timer. Časovač čeká, a pak aktivuje událost, nazývanou jako tik. Časovač může spustit akci nebo akci pravidelně opakovat.

V programu časovač umožňuje přehrávači zvolit dvě ikony. Pokud se ikony neshodují, skryje obě ikony znovu po krátké době.

  1. Vyberte kartu Nástrojová sada, v kategorii Komponenty, poklikejte nebo přetáhněte komponentu Časovač do formuláře. Ikona časovače s názvem časovač1se zobrazí v prostoru pod formulářem.

    Snímek obrazovky zobrazuje ikonu časovače pod formulářem.

  2. Výběrem ikony časovače 1 vyberte časovač. V okně Vlastnosti vyberte tlačítko Vlastnosti a zobrazte vlastnosti.

  3. Nastavte vlastnost Interval na 750, což je 750 milisekund.

    Vlastnost Interval určuje časovači, jak dlouho má čekat mezi tiknutími, když aktivuje jeho Tick událost. Program volá metodu Start(), která spustí časovač poté, co hráč zvolí druhý popisek.

  4. Zvolte ikonu ovládacího prvku časovače a stiskněte Enternebo poklikejte na časovač. Integrované vývojové prostředí přidá do Form1.cs nebo Form1.vbprázdnou obslužnou rutinu události Tick. Nahraďte kód následujícím kódem.

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

Funkce obsluhující událost Tick dělá tři věci:

  • Zajišťuje, aby časovač neběží voláním metody Stop().
  • Používá dvě referenční proměnné, firstClicked a secondClicked, aby ikony dvou popisků, které hráč vybral, byly znovu neviditelné.
  • Obnoví odkazové proměnné firstClicked a secondClicked na null v jazyce C# a na Nothing v jazyce Visual Basic.
  1. Přejděte do editoru kódu a přidejte kód do horní a dolní části obslužné metody události label1_Click() v Form1.cs nebo Form1.vb. Tento kód zkontroluje, jestli je časovač povolený, nastaví secondClicked referenční proměnnou a spustí časovač. Metoda obslužné rutiny události label1_Click() nyní vypadá takto:

    /// <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 label1_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 časovač spuštěn kontrolou hodnoty vlastnosti Enabled. Pokud hráč zvolí první a druhý ovládací prvek Popisek a spustí se časovač, výběr třetího popisku nic neudělá.
  • Kód v dolní části metody nastaví secondClicked referenční proměnnou pro sledování druhého ovládacího prvku Popisek. Potom nastaví barvu ikony popisku na černou, aby byla viditelná. Potom spustí časovač v jednorázovém režimu, takže počká 750 milisekund a pak provede jeden impuls. Obslužná rutina události Tick časovače skryje dvě ikony a resetuje firstClicked a secondClicked referenční proměnné. Formulář je připravený pro hráče, aby si vybral jinou dvojici ikon.

Poznámka

Pokud zkopírujete a vložíte blok kódu label1_Click() místo ručního zadávání kódu, nezapomeňte nahradit stávající label1_Click() kód. Jinak skončíte s duplicitním blokem kódu.

  1. Uložte a spusťte program. Vyberte čtverec a ikona se zobrazí. Zvolte jiný čtverec. Ikona se zobrazí krátce a obě ikony zmizí.

Program teď sleduje první a druhou ikonu, kterou zvolíte. Pomocí časovače se pozastaví před tím, než ikony zmizí.

Další kroky

Pokračujte na další tutoriál, abyste se dozvěděli, jak dokončit svou Hru na párování.