Delen via


Handleiding: Een bericht weergeven in uw matchende WinForms-app

In deze reeks van vier zelfstudies bouwt u een overeenkomend spel, waarbij de speler paren verborgen pictogrammen matcht.

In deze zelfstudie wijzigt u uw Matching Game zodat overeenkomstige paren zichtbaar blijven en een felicitatiebericht wordt weergegeven wanneer een speler wint.

In deze zelfstudie leert u het volgende:

  • Houd paren zichtbaar.
  • Controleer of een speler heeft gewonnen.
  • Probeer andere functies.

Voorwaarden

Deze zelfstudie bouwt voort op deze vorige zelfstudies:

  1. Een overeenkomende gametoepassing maken
  2. Pictogrammen toevoegen aan uw overeenkomende game
  3. Een timer toevoegen aan uw overeenkomende game

Paren zichtbaar houden

Wanneer een speler overeenkomt met een paar, moet de game zichzelf opnieuw instellen, zodat deze geen labels meer bijhoudt die gebruikmaken van de firstClicked en secondClicked referentievariabelen. De kleuren voor de twee overeenkomende labels mogen niet opnieuw worden ingesteld. Deze labels worden nog steeds weergegeven.

  1. Voeg de volgende if-instructie toe aan de label_Click() gebeurtenis-handlermethode. Plaats deze aan het einde van de code net boven de instructie waar u de timer start.
        // 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 clicked two matching icons, keep them 
        // black and reset firstClicked and secondClicked 
        // so the player can click another icon
        if (firstClicked.Text == secondClicked.Text)
        {
            firstClicked = null;
            secondClicked = null;
            return;
        }

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

De if instructie controleert of het pictogram in het eerste label dat de speler kiest, hetzelfde is als het pictogram in het tweede label. Als de pictogrammen hetzelfde zijn, voert het programma de drie instructies uit. Met de eerste twee instructies worden de firstClicked en secondClicked referentievariabelen opnieuw ingesteld. Ze houden geen van de labels meer bij. De derde instructie is een return instructie, die de rest van de instructies in de methode overslaat zonder deze uit te voeren.

  1. Voer het programma uit en begin met het kiezen van vierkanten op het formulier.

Schermopname van het overeenkomende spel dat u in deze zelfstudie maakt.

Als u een paar kiest dat niet overeenkomt, wordt de Tikgebeurtenis van de timer geactiveerd. Beide pictogrammen verdwijnen.

Als u een overeenkomend paar kiest, wordt vervolgens de nieuwe if-instructie uitgevoerd. De return-opdracht zorgt ervoor dat de methode de code overslaat die de timer start. De pictogrammen blijven zichtbaar.

Controleren of een speler heeft gewonnen

Je hebt een leuk spel gemaakt. Nadat een speler wint, moet het spel eindigen. In deze sectie wordt een methode toegevoegd om te controleren of de speler heeft gewonnen.

  1. Voeg een CheckForWinner() methode toe onder aan uw code, onder de timer1_Tick() gebeurtenis-handler.
/// <summary>
/// Check every icon to see if it is matched, by 
/// comparing its foreground color to its background color. 
/// If all of the icons are matched, the player wins
/// </summary>
private void CheckForWinner()
{
    // Go through all of the labels in the TableLayoutPanel, 
    // checking each one to see if its icon is matched
    foreach (Control control in tableLayoutPanel1.Controls)
    {
        Label iconLabel = control as Label;

        if (iconLabel != null) 
        {
            if (iconLabel.ForeColor == iconLabel.BackColor)
                return;
        }
    }

    // If the loop didn’t return, it didn't find
    // any unmatched icons
    // That means the user won. Show a message and close the form
    MessageBox.Show("You matched all the icons!", "Congratulations");
    Close();
}

De methode maakt gebruik van een andere foreach lus in C# of For Each lus in Visual Basic om elk label in de TableLayoutPanelte doorlopen. Hiermee wordt de kleur van het pictogram van elk label gecontroleerd om te controleren of deze overeenkomt met de achtergrond. Als de kleuren overeenkomen, blijft het pictogram onzichtbaar en heeft de speler niet alle resterende pictogrammen gevonden.

In dat geval gebruikt het programma een return instructie om de rest van de methode over te slaan. Als de lus alle labels doorloopt zonder de return-instructie uit te voeren, betekent dit dat alle pictogrammen in het formulier overeenkomen. Het programma toont een MessageBox om de speler te feliciteren met zijn overwinning en roept vervolgens de Close() methode aan om het spel te beëindigen.

  1. Laat de Click gebeurtenishandler van het label de nieuwe CheckForWinner()-methode aanroepen.
// 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;

// Check to see if the player won
CheckForWinner();

// If the player clicked two matching icons, keep them 
// black and reset firstClicked and secondClicked 
// so the player can click another icon
if (firstClicked.Text == secondClicked.Text)
{
    firstClicked = null;
    secondClicked = null;
    return;
}

Zorg ervoor dat uw programma onmiddellijk na het weergeven van het tweede pictogram dat de speler kiest, controleert op een winnaar. Zoek naar de lijn waar u de kleur van het tweede gekozen pictogram instelt en roep vervolgens de CheckForWinner() methode aan direct na die regel.

  1. Sla het programma op en voer het uit. Speel het spel en match alle pictogrammen. Wanneer u wint, geeft het programma een gefeliciteert bericht weer.

    Schermopname toont het overeenkomende spel met een Berichtenvak.

    Nadat u OKhebt geselecteerd, wordt het Matching Spel gesloten.

Probeer andere functies

Je Matching Game is voltooid. U kunt meer functies toevoegen om dit spel uitdagender en interessanter te maken. Hier volgen enkele opties.

  • Vervang de pictogrammen en kleuren door de pictogrammen en kleuren die u kiest.

    Bekijk de eigenschap ForeColor van het label.

  • Voeg een gametimer toe die bijhoudt hoe lang het duurt voordat de speler wint.

    U kunt een label toevoegen om de verstreken tijd op het formulier weer te geven. Plaats deze boven de TableLayoutPanel. Voeg nog een timer toe aan het formulier om de tijd bij te houden. Gebruik code om de timer te starten wanneer de speler het spel start en stop de timer nadat ze overeenkomen met de laatste twee pictogrammen.

  • Voeg een geluid toe wanneer de speler een overeenkomst vindt, een ander geluid wanneer de speler twee pictogrammen ontdekt die niet overeenkomen en een derde geluid wanneer het programma de pictogrammen weer verbergt.

    Als u geluiden wilt afspelen, kunt u de System.Media naamruimte gebruiken. Zie Geluiden afspelen in de Windows Forms-app (C#) of Audio afspelen in Visual Basicvoor meer informatie.

  • Maak het spel moeilijker door het bord groter te maken.

    U moet meer doen dan alleen rijen en kolommen toevoegen aan TableLayoutPanel. U moet ook rekening houden met het aantal pictogrammen dat u maakt.

  • Maak het spel moeilijker door het eerste pictogram te verbergen als de speler te langzaam reageert.

Volgende stappen

Gefeliciteerd! U hebt deze reeks zelfstudies voltooid. U hebt deze programmeer- en ontwerptaken uitgevoerd in de Visual Studio IDE:

  • Opgeslagen objecten, zoals pictogrammen, in een lijst
  • Een lus in C# of Visual Basic gebruikt om een lijst te doorlopen
  • Status bijgehouden met behulp van referentievariabelen
  • Een gebeurtenis-handler gebouwd om te reageren op gebeurtenissen voor meerdere objecten
  • Een timer toegevoegd die aftelt en een gebeurtenis triggert.

Ga naar dit artikel voor uitgebreide informatie over Windows Forms Designer.