Självstudie: Visa ett meddelande i ditt matchningsspel i WinForms-appen
I den här serien med fyra självstudier skapar du ett matchande spel där spelaren matchar par med dolda ikoner.
I den här självstudien ändrar du matchningsspelet för att hålla matchade par synliga och visa ett grattismeddelande när en spelare vinner.
I den här handledningen lär du dig hur du:
- Håll par synliga.
- Kontrollera om en spelare vann.
- Prova andra funktioner.
Förutsättningar
Den här självstudien bygger på de här tidigare självstudierna:
- Skapa ett matchande spelprogram
- Lägg till ikoner i matchande spel
- Lägg till en timer i matchande spel
Håll par synliga
När en spelare matchar ett par bör spelet återställa sig självt så att det inte längre håller reda på etiketter som använder firstClicked
och secondClicked
referensvariabler.
Det bör inte återställa färgerna för de två etiketterna som matchades.
Dessa etiketter fortsätter att visas.
- Lägg till följande
if
-instruktion ilabel_Click()
-händelsehanterarmetoden. Placera den nära slutet av koden precis ovanför instruktionen där du startar timern.
// 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();
}
}
Instruktionen if
kontrollerar om ikonen i den första etiketten som spelaren väljer är samma som ikonen i den andra etiketten.
Om ikonerna är desamma kör programmet sina tre instruktioner.
De första två uttrycken återställer referensvariablerna firstClicked
och secondClicked
.
De håller inte längre reda på någon av etiketterna.
Den tredje instruktionen är en return
-instruktion som hoppar över resten av instruktionerna i metoden utan att dessa körs.
- Kör programmet och börja sedan välja rutor i formuläret.
Om du väljer ett par som inte matchar utlöses timerns Tick-händelse. Båda ikonerna försvinner.
Om du väljer ett matchande par körs den nya if
-instruktionen.
Retursatsen gör att metoden hoppar över koden som startar timern.
Ikonerna förblir synliga.
Kontrollera om en spelare vann
Du har skapat ett roligt spel. När en spelare har vunnit bör spelet avslutas. Det här avsnittet lägger till en metod för att kontrollera om spelaren vann.
- Lägg till en
CheckForWinner()
-metod längst ned i koden undertimer1_Tick()
händelsehanteraren.
/// <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();
}
Metoden använder en annan foreach
-loop i C# eller For Each
-loop i Visual Basic för att gå igenom varje etikett i TableLayoutPanel.
Den kontrollerar varje etiketts ikonfärg för att kontrollera om den matchar bakgrunden.
Om färgerna matchar förblir ikonen osynlig och spelaren har inte matchat alla återstående ikoner.
I så fall använder programmet en return
-instruktion för att hoppa över resten av metoden.
Om loopen tar sig igenom alla etiketter utan att köra return
-instruktionen innebär det att alla ikoner i formuläret matchades.
Programmet visar en MessageBox- för att gratulera spelaren för vinsten, och anropar sedan Close()
-metoden för att avsluta spelet.
- Låt etikettens Click händelsehanterare anropa den nya metoden
CheckForWinner()
.
// 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;
}
Se till att programmet söker efter en vinnare direkt efter att det visar den andra ikonen som spelaren väljer. Leta efter raden där du anger den andra valda ikonens färg och anropa sedan metoden CheckForWinner()
direkt efter den raden.
Spara och kör programmet. Spela spelet och matcha alla ikoner. När du vinner visar programmet ett gratulationsmeddelande.
När du har valt OKstängs matchningsspelet.
Prova andra funktioner
Ditt matchande spel är klart. Du kan lägga till fler funktioner för att göra det här spelet mer utmanande och intressant. Här är några alternativ.
Ersätt ikonerna och färgerna med de du väljer.
Prova att titta på etikettens egenskap ForeColor.
Lägg till en speltimer som spårar hur lång tid det tar för spelaren att vinna.
Du kan lägga till en etikett för att visa den förflutna tiden i formuläret. Placera den ovanför TableLayoutPanel. Lägg till ytterligare en timer i formuläret för att spåra tiden. Använd kod för att starta timern när spelaren startar spelet och stoppa timern efter att de matchar de två sista ikonerna.
Lägg till ett ljud när spelaren hittar en matchning, ett annat ljud när spelaren upptäcker två ikoner som inte matchar och ett tredje ljud när programmet döljer ikonerna igen.
Om du vill spela upp ljud kan du använda System.Media namnrymd. Mer information finns i Spela upp ljud i Windows Forms-appen (C#) eller Spela upp ljud i Visual Basic.
Gör spelet svårare genom att göra brädet större.
Du behöver göra mer än att bara lägga till rader och kolumner i TableLayoutPanel. Du måste också ta hänsyn till antalet ikoner som du skapar.
Gör spelet mer utmanande genom att dölja den första ikonen om spelaren är för långsam för att svara.
Nästa steg
Grattis! Du har slutfört den här serien med självstudier. Du har utfört dessa programmerings- och designuppgifter i Visual Studio IDE:
- Lagrade objekt, till exempel ikoner, i en lista
- Använde en loop i C# eller Visual Basic för att iterera via en lista
- Höll reda på tillstånd med hjälp av referensvariabler
- Skapat en händelsehanterare för att svara på händelser för flera objekt
- Lade till en timer som räknar ned och utlöser en händelse
Gå vidare till den här artikeln för en djupdykning i Windows Forms Designer.