Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tej serii czterech samouczków utworzysz pasującą grę, w której gracz dopasowuje pary ukrytych ikon.
W tym samouczku zrewidujesz grę dopasowania, aby zachować widoczność dopasowanych par i wyświetlić wiadomość z gratulacjami, gdy gracz wygra.
Z tego samouczka dowiesz się, jak wykonywać następujące działania:
- Utrzymuj pary w widoczności
- Sprawdź, czy gracz wygrał.
- Wypróbuj inne funkcje.
Warunki wstępne
Ten samouczek jest oparty na poprzednich samouczkach:
Zachowaj pary widocznymi
Gdy gracz dopasuje parę, gra powinna się zresetować, aby nie śledzić żadnych etykiet, które używają zmiennych odniesienia firstClicked
i secondClicked
.
Nie należy resetować kolorów dla dwóch pasujących etykiet.
Te etykiety będą nadal wyświetlane.
- Dodaj następującą instrukcję
if
do metody obsługi zdarzeńlabel_Click()
. Umieść go na końcu kodu tuż nad instrukcją, w której uruchamiasz czasomierz.
// 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();
}
}
Instrukcja if
sprawdza, czy ikona w pierwszej etykiecie wybranej przez gracza jest taka sama jak ikona w drugiej etykiecie.
Jeśli ikony są takie same, program uruchamia trzy polecenia.
Pierwsze dwie instrukcje resetują zmienne odniesienia firstClicked
i secondClicked
.
Nie śledzą już żadnej z etykiet.
Trzecia instrukcja jest instrukcją return
, która pomija resztę instrukcji w metodzie bez ich uruchamiania.
- Uruchom program, a następnie zacznij wybierać kwadraty w formularzu.
Jeśli wybierzesz parę, która nie pasuje, wyzwalane jest zdarzenie Tick czasomierza. Obie ikony znikają.
Jeśli wybierzesz zgodną parę, zostanie uruchomiona nowa instrukcja if
.
Instrukcja return powoduje, że metoda pomija kod, który uruchamia czasomierz.
Ikony pozostają widoczne.
Sprawdź, czy gracz wygrał
Udało Ci się stworzyć zabawną grę. Po zwycięstwie gracza gra powinna zakończyć się. Ta sekcja dodaje metodę sprawdzania, czy gracz wygrał.
- Dodaj metodę
CheckForWinner()
do dołu kodu poniżej procedury obsługi zdarzeńtimer1_Tick()
.
/// <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();
}
Metoda używa innej pętli foreach
w języku C# lub pętli For Each
w języku Visual Basic, aby przejść przez każdą etykietę w TableLayoutPanel.
Sprawdza kolor ikony każdej etykiety, aby sprawdzić, czy pasuje do tła.
Jeśli kolory są zgodne, ikona pozostaje niewidoczna, a gracz nie dopasował jeszcze wszystkich pozostałych ikon.
W takim przypadku program używa instrukcji return
, aby pominąć pozostałą część metody.
Jeśli pętla przechodzi przez wszystkie etykiety bez wykonywania instrukcji return
, oznacza to, że wszystkie ikony w formularzu zostały dopasowane.
Program pokazuje MessageBox, aby pogratulować graczowi wygranej, a następnie wywołuje metodę Close()
, aby zakończyć grę.
- Upewnij się, że program obsługi zdarzeń etykiety Click wywołuje nową metodę
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;
}
Upewnij się, że program sprawdza zwycięzcę natychmiast po tym, jak wyświetli drugą ikonę wybraną przez gracza. Wyszukaj wiersz, w którym ustawisz kolor drugiej wybranej ikony, a następnie wywołaj metodę CheckForWinner()
bezpośrednio po tym wierszu.
Zapisz i uruchom program. Graj i dopasuj wszystkie ikony. Po wygraniu program wyświetla wiadomość gratulacyjną.
Po wybraniu OKgra dopasowywania zostanie zamknięta.
Wypróbuj inne funkcje
Twoja gra dopasowywania jest zakończona. Możesz dodać więcej funkcji, aby uczynić tę grę bardziej trudną i interesującą. Oto kilka opcji.
Zastąp wybrane ikony i kolory.
Spróbuj przyjrzeć się właściwości ForeColor etykiety.
Dodaj czasomierz gry, który śledzi, jak długo trwa wygranie gracza.
Możesz dodać etykietę, aby wyświetlić czas, który upłynął w formularzu. Umieść go nad TableLayoutPanel. Dodaj kolejny czasomierz do formularza, aby śledzić czas. Użyj kodu, aby uruchomić czasomierz, gdy gracz rozpocznie grę, i zatrzymać czasomierz po dopasowaniu dwóch ostatnich ikon.
Dodaj dźwięk, gdy gracz znajdzie dopasowanie, inny dźwięk, gdy gracz odkrywa dwie ikony, które nie pasują, a trzeci dźwięk, gdy program ukrywa ikony ponownie.
Do odtwarzania dźwięków możesz użyć przestrzeni nazw System.Media. Aby uzyskać więcej informacji, zobacz Odtwórz dźwięki w aplikacji Windows Forms (C#) lub Jak odtwarzać dźwięk w programie Visual Basic.
Utrudnić grę, czyniąc planszę większą.
Musisz zrobić więcej niż tylko dodać wiersze i kolumny do tableLayoutPanel. Należy również wziąć pod uwagę liczbę utworzonych ikon.
Utrudnić grę, ukrywając pierwszą ikonę, jeśli gracz jest zbyt powolny, aby zareagować.
Następne kroki
Gratulacje! Ukończyłeś tę serię samouczków. Wykonano te zadania programistyczne i projektowe w środowisku IDE programu Visual Studio:
- Przechowywane obiekty, takie jak ikony, na liście
- Użyto pętli w języku C# lub Visual Basic do iterowania listy
- Śledzenie stanu przy użyciu zmiennych referencyjnych
- Skompiluj program obsługi zdarzeń w celu reagowania na zdarzenia dla wielu obiektów
- Dodano czasomierz, który odlicza i uruchamia zdarzenie
Przejdź do tego artykułu, aby uzyskać szczegółowe informacje na temat programu Windows Forms Designer.