Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här serien med fyra självstudier skapar du ett matchande spel där spelaren matchar par med dolda ikoner.
Ditt matchningsspelsprogram behöver spåra vilken etikettkontroll spelaren väljer. När en spelare har valt den första etiketten ska ikonen visas i programmet. När den andra etiketten har valts bör programmet visa båda ikonerna under en kort tid. Sedan döljs båda ikonerna.
Programmet håller reda på vilken etikett du väljer första och andra gången genom att använda referensvariablerna. En timer döljer ikonerna och styr hur länge ikonerna ska visas
- Lägg till etikettreferenser.
- Lägg till en timer.
Förutsättningar
Den här självstudien bygger på tidigare självstudier Skapa ett matchande spelprogram och Lägg till ikoner i ditt matchande spel. Slutför självstudierna först.
Lägga till etikettreferenser
I det här avsnittet lägger du till två referensvariabler i koden. De håller reda på eller hänvisar till etikettsobjekt.
Lägg till etikettreferenser i formuläret med hjälp av följande kod i
Form1.csellerForm1.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;
Om du använder C# placerar du koden efter den inledande klammerparentesen och strax efter klassdeklarationen (public partial class Form1 : Form). Om du använder Visual Basic placerar du koden direkt efter klassdeklarationen (Public Class Form1).
Dessa instruktioner gör inte att etikettkontrollkomponenter visas i formuläret eftersom det saknas ett new nyckelord.
När programmet startar är både firstClicked och secondClicked inställda på null för C# eller Nothing för Visual Basic.
Ändra händelsehanteraren för Click i
Form1.csellerForm1.vbså att den nyafirstClickedreferensvariabeln används. Ta bort den sista instruktionen ilabel1_Click()-händelsehanterarmetoden (clickedLabel.ForeColor = Color.Black;) och ersätt den medif-instruktionen enligt följande./// <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; } } }
Spara och kör programmet. Välj en av etikettkontrollerna och dess ikon visas. Välj nästa etikettkontroll och observera att ingenting händer.
Endast den första ikonen som väljs visas. De andra ikonerna är osynliga.
Programmet håller redan reda på den första etiketten som spelaren valde.
Referensen firstClicked är inte null i C# eller Nothing i Visual Basic.
När if-instruktionen upptäcker att firstClicked inte är lika med null eller Nothing, kör den satserna.
Lägga till en timer
Appen för matchningsspel använder en Timer kontrollfunktion. En timer väntar och initierar sedan en händelse som kallas tick. En timer kan starta en åtgärd eller upprepa en åtgärd regelbundet.
I ditt program gör timern det möjligt för en spelare att välja två ikoner. Om ikonerna inte matchar döljs de två ikonerna igen efter en kort tidsperiod.
Välj fliken Toolbox i kategorin Components och dubbelklicka eller dra komponenten Timer till formuläret. Timerikonen, som kallas timer1, visas i ett utrymme under formuläret.
Välj ikonen Timer1 för att välja timern. I fönstret Egenskaper väljer du knappen Egenskaper för att visa egenskaper.
Ange egenskapen Intervall till 750, vilket är 750 millisekunder.
Egenskapen Interval anger hur lång tid det tar att vänta mellan ticks, när den utlöser sin Tick händelse. Programmet anropar metoden Start() för att starta timern när spelaren har valt den andra etiketten.
Välj timerkontrollikonen och tryck sedan på Retureller dubbelklicka på timern. IDE lägger till en tom Tick-händelsehanterare till
Form1.csellerForm1.vb. Ersätt koden med följande kod./// <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; }
Händelsehanteraren Tick gör tre saker:
- Den ser till att timern inte körs genom att anropa metoden Stop().
- Den använder två referensvariabler,
firstClickedochsecondClicked, för att göra ikonerna för de två etiketter som spelaren valde osynliga igen. - Den återställer referensvariablerna
firstClickedochsecondClickedtillnulli C# ochNothingi Visual Basic.
Gå till kodredigeraren och lägg till kod längst upp och ned på
label1_Click()-händelsehanterarmetoden iForm1.csellerForm1.vb. Den här koden kontrollerar om timern är aktiverad, angersecondClickedreferensvariabeln och startar timern. Denlabel1_Click()händelsehanterarmetoden ser nu ut så här:/// <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(); } }
- Koden överst i metoden kontrollerar om timern startades genom att kontrollera värdet för egenskapen Enabled. Om spelaren väljer de första och andra Label-kontrollerna och timern startar, kommer det inte att ha någon effekt att välja en tredje Label.
- Koden i slutet av metoden ställer in referensvariabeln
secondClickedför att spåra den andra Label-kontrollen. Sedan anger den etikettens ikonfärg till svart för att göra den synlig. Sedan startar den timern i enskottsläge, så att den väntar 750 millisekunder och sedan utlöser ett enda tick. Timerns Tick-händelsehanterare döljer de två ikonerna och återställer referensvariablernafirstClickedochsecondClicked. Formuläret är redo för spelaren att välja ett annat par ikoner.
Anteckning
Om du kopierar och klistrar in label1_Click() kodblocket i stället för att ange koden manuellt måste du ersätta den befintliga label1_Click() koden.
Annars får du ett duplicerat kodblock.
- Spara och kör programmet. Välj en fyrkant och ikonen blir synlig. Välj en annan fyrkant. Ikonen visas kort och sedan försvinner båda ikonerna.
Ditt program håller nu reda på de första och andra ikonerna som du väljer. Den använder timern för att pausa innan ikonerna försvinner.
Nästa steg
Gå vidare till nästa handledning för att lära dig hur du avslutar ditt matchningsspel.