Samouczek: dodawanie zmiennych referencyjnych i kontrolki czasomierza do zgodnej aplikacji WinForms gry
W tej serii czterech samouczków utworzysz pasującą grę, w której gracz dopasowuje pary ukrytych ikon.
Twój program gry dopasowań musi śledzić, które kontrolki etykiet wybiera gracz. Gdy gracz wybierze pierwszą etykietę, program powinien wyświetlić ikonę. Po wybraniu drugiej etykiety program powinien wyświetlić obie ikony przez krótki czas. Następnie ukrywa obie ikony.
Program śledzi, którą etykietę należy wybrać jako pierwszą i drugą, używając zmiennych referencyjnych . Czasomierz ukrywa ikony i kontroluje czas wyświetlania ikon
- Dodaj odwołania do etykiet.
- Dodaj czasomierz.
Warunki wstępne
Ten samouczek opiera się na poprzednich samouczkach, Tworzenie zgodnej aplikacji gry i Dodawanie ikon do pasującej gry. Najpierw ukończ te samouczki.
Dodawanie odwołań do etykiet
W tej sekcji dodasz do kodu dwie zmienne referencyjne . Śledzą lub odwołują się do obiektów Label.
Dodaj odwołania do etykiety do formularza przy użyciu następującego kodu w
Form1.cs
lubForm1.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;
Jeśli używasz języka C#, umieść kod po nawiasie klamrowym otwierającym i tuż po deklaracji klasy (public partial class Form1 : Form
). Jeśli używasz języka Visual Basic, umieść kod bezpośrednio po deklaracji klasy (Public Class Form1
).
Te instrukcje nie powodują wyświetlenia kontrolek etykiety na formularzu, ponieważ nie ma słowa kluczowego new
.
Po uruchomieniu programu zarówno firstClicked
, jak i secondClicked
są ustawione na null
dla języka C# lub Nothing
dla języka Visual Basic.
Zmodyfikuj program obsługi zdarzeń Click w
Form1.cs
lubForm1.vb
, aby użyć nowej zmiennej referencyjnejfirstClicked
. Usuń ostatnią instrukcję w metodzie obsługi zdarzeńlabel1_Click()
(clickedLabel.ForeColor = Color.Black;
) i zastąp ją instrukcjąif
w następujący sposób./// <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; } } }
Zapisz i uruchom program. Wybierz jedną z kontrolek etykiety i zostanie wyświetlona jej ikona. Wybierz kontrolkę następnej etykiety i zwróć uwagę, że nic się nie dzieje.
Zostanie wyświetlona tylko pierwsza wybrana ikona. Inne ikony są niewidoczne.
Program śledzi już pierwszą etykietę wybraną przez gracza.
Odwołanie firstClicked
nie jest null
w języku C# ani Nothing
w języku Visual Basic.
Gdy instrukcja if
stwierdzi, że firstClicked
nie jest równe null
lub Nothing
, uruchamia te instrukcje.
Dodawanie czasomierza
Aplikacja Gra Dopasowań używa kontrolki Timer. Czasomierz czeka, a następnie uruchamia zdarzenie nazywane znacznikiem. Czasomierz może uruchomić akcję lub regularnie powtarzać akcję.
W programie czasomierz umożliwia graczowi wybranie dwóch ikon. Jeśli ikony nie są zgodne, ponownie ukrywa te dwie ikony po krótkim czasie.
Wybierz kartę Przybornik, w kategorii Komponenty, kliknij dwukrotnie lub przeciągnij składnik Czasomierz do formularza. Ikona czasomierza o nazwie timer1jest wyświetlana w przestrzeni poniżej formularza.
Wybierz ikonę Timer1, aby wybrać czasomierz. W oknie Właściwości wybierz przycisk Właściwości, aby wyświetlić właściwości.
Ustaw właściwość interwału na 750, czyli 750 milisekund.
Właściwość Interval informuje czasomierz, jak długo należy czekać między znacznikami, gdy wyzwala zdarzenie Tick. Program wywołuje metodę Start(), aby uruchomić czasomierz po wybraniu drugiej etykiety przez zawodnika.
Wybierz ikonę kontrolki czasomierza, a następnie naciśnij Enterlub kliknij dwukrotnie czasomierz. Środowisko IDE dodaje pustą procedurę obsługi zdarzenia 'Tick' do
Form1.cs
lubForm1.vb
. Zastąp kod następującym kodem./// <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; }
Procedura obsługi zdarzeń Tick wykonuje trzy czynności:
- Upewnia się, że czasomierz nie jest uruchomiony, wywołując metodę Stop().
- Używa dwóch zmiennych referencyjnych,
firstClicked
isecondClicked
, aby ikony dwóch etykiet wybranych przez gracza stały się ponownie niewidoczne. - Spowoduje to zresetowanie zmiennych referencyjnych
firstClicked
isecondClicked
donull
w języku C# iNothing
w języku Visual Basic.
Przejdź do edytora kodu i dodaj kod w górnej i dolnej części metody obsługi zdarzeń
label1_Click()
wForm1.cs
lubForm1.vb
. Ten kod sprawdzi, czy czasomierz jest włączony, ustawi zmienną referencyjnąsecondClicked
i uruchom czasomierz. Metoda obsługi zdarzeńlabel1_Click()
wygląda teraz następująco:/// <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(); } }
- Kod w górnej części metody sprawdza, czy czasomierz został uruchomiony, sprawdzając wartość właściwości Enabled. Jeśli gracz wybierze pierwszą i drugą kontrolkę etykiety, a timer się rozpocznie, wybranie trzeciej etykiety nic nie zrobi.
- Kod na dole metody ustawia zmienną referencyjną
secondClicked
w celu śledzenia drugiej kontrolki typu Label. Następnie ustawia kolor ikony etykiety na czarny, aby była widoczna. Następnie uruchamia czasomierz w trybie jednego strzału, tak aby czekał 750 milisekund, a następnie uruchamia pojedynczy znacznik. Procedura obsługi zdarzenia Tick zegara ukrywa dwie ikony i resetuje zmienne referencyjnefirstClicked
isecondClicked
. Formularz jest gotowy do wybrania innej pary ikon.
Notatka
Jeśli skopiujesz i wklejesz blok kodu label1_Click()
zamiast ręcznie wprowadzać kod, pamiętaj o zastąpieniu istniejącego kodu label1_Click()
.
W przeciwnym razie zostanie wyświetlony zduplikowany blok kodu.
- Zapisz i uruchom program. Wybierz kwadrat, a ikona stanie się widoczna. Wybierz inny kwadrat. Ikona zostanie wyświetlona krótko, a następnie obie ikony znikną.
Twój program śledzi teraz wybrane przez Ciebie pierwsze i drugie ikony. Używa czasomierza do wstrzymania przed zniknięciem ikon.
Następne kroki
Przejdź do następnego samouczka, aby dowiedzieć się, jak zakończyć grę dopasowywania.