Back to Top

Lekcja 8 – Gra w Finał Koła Fortuny

Na koniec spróbujemy stworzyć grę, która polegać będzie na zgadywaniu hasła – podobnie jak w teleturnieju koło fortuny. Zobaczymy strukturę hasła, a następnie będziemy mieli możliwość odgadywania poszczególnych liter. Po kilku próbach będziemy musieli wpisać prawidłowe hasło.

Założenia Gry

Gra powinna działać następująco:

Po uruchomieniu gry wyświetlą się komunikaty początkowe oraz struktura hasła w następującej postaci: *** ** **** – dla hasła Ala ma kota.

Będziemy wiedzieli z ilu liter składa się hasło, ale bez znajomości konkretnych znaków.

Następnie program poprosi o podanie litery. Kiedy podamy na przykład literę “a”, program kolejny raz wyświetli strukturę hasła, ale odkryje podaną literę: **a *a ***a. Program jest czuły na wielkość liter dlatego nie odkrył dużej litery “A”. Takich prób będziemy mieli 5, po wszystkich próbach będziemy mogli wpisać hasło, a program sprawdzi czy jest prawidłowe.

Kroki do wykonania

Na początek opiszemy, jakie kroki musi wykonać program, aby działać zgodnie z założeniami:

  • Wyświetlenie komunikatów początkowych.

  • Wyświetlenie struktury hasła.

  • Pobranie litery, sprawdzenie, wyświetlenie hasła z podaną literą (jeśli ta znajduje się w haśle)

  • Powyższy krok należy powtórzyć 5 razy.

  • Pobranie i sprawdzenie hasła.

  • Wyświetlenie wyniku.

Dane

Na początku zadeklarujmy dwie zmienne.

Jedną typu string, o nazwie sentence, która przechowywać będzie hasło do odgadnięcia. Do zmiennej sentence przypiszmy przykładowe hasło.

Drugą typu int, o nazwie counter, która będzie służyć za licznik prób. Licznik będzie się zmniejszał za każdym razem, gdy wpiszemy literę do odgadnięcia. Gdy osiągnie zero program zablokuje możliwość zgadywania kolejnych liter.

string sentence = "Ala ma kota";
int counter = 5;

Następnie wyświetlimy kilka informacji początkowych, tytuł programu oraz podpowiedź co trzeba zrobić.

Console.WriteLine("Koło Fortuny - Finał");
Console.WriteLine("Podaj litery i zgadnij Hasło:");

Kiedy mamy już wartości początkowe oraz wyświetliliśmy niezbędne informacje początkowe, wyświetlmy strukturę hasła zasłoniętą gwiazdkami. Hasło "Ala ma kota" wyświetl jako "*** ** ****".

Jak wyświetlić tekst, ale zamiast liter wyświetlić gwiazdki?

Typ string, to nie tylko typ, który przechowuje tekst, ale jest również tablicą typu char i tym samym można go iterować w pętli foreach.

string text = "text";
foreach(char t in text)
{
	Console.Write (t); // zmienna t będzie zawierać poszczególne znaki tekstu.
}

Wracając do zadania. Aby zamiast tekstu wyświetlić gwiazdki, trzeba w pętli przejść przez nasze hasło, a w pętli skorzystać z instrukcji if else, która sprawdzi czy aktualnie iterowany znak jest spacją. Jeśli tak, to go wyświetli. Jeśli nie, to wyświetli gwiazdkę.

Przy wyświetlaniu poszczególnych znaków posłużmy się metodą Write, a nie WriteLine.

Metoda WriteLine wyświetla każdy tekst w nowej linii. Write nie przechodzi do nowej linii.

foreach (var character in sentence)
{
    if (character == ' ')
    {
        Console.Write(character);
    }
    else
    {
        Console.Write('*');
    }
}
Console.WriteLine(); // Przejście do nowej linii.

Na koniec musimy wywołać metodę WriteLine bez parametrów, aby przejść do nowej linii po wyświetleniu całego hasła.

Teraz przechodzimy do sedna programu. Na początku musimy zadeklarować zmienną typu char, która będzie przechowywała znak, który chcemy sprawdzić w naszym haśle. Zmienna nie musi być inicjowana, zrobimy to w późniejszym czasie.

char c;

Kolejną nowością jest pętla do while. Pętla działa podobnie do poprzednio poznanych pętli, ale ma inną strukturę. Pętlę deklarujemy zaczynając od słowa kluczowego do. Następnie wpisujemy nawiasy klamrowe, między którymi znajdują się instrukcje do wykonania przy każdej iteracji. Na koniec słowo while z warunkiem pętli. Kończymy średnikiem.

do
{
}
while(WARUNEK);

Jak działa warunek w pętli do while? Kiedy program wchodzi do pętli, wykonuje wszystkie instrukcje, a następnie sprawdza warunek. Jeśli jest on spełniony, pętla wykonuje się drugi raz itd.

Tworzymy więc pętlę do while, w której będziemy pobierać literę od użytkownika i sprawdzać, czy znajduje się ona w haśle.

W pętli do while wyświetlmy komunikat, który powie użytkownikowi, co zrobić.

Console.Write("Podaj literę: ");

Następnie ostatnia nowość. Musimy pobrać do zmiennej c znak wpisany przez użytkownika. Możemy to zrobić za pomocą przygotowanej metody ReadKey.

c = ReadKey();

Kiedy program dotrze do powyższej linii kodu, konsola zatrzyma się i będzie można wpisać literę i zatwierdzić ją klawiszem enter.

Ponieważ znak wpisywaliśmy w tej samej linii co wyświetlony komunikat, zróbmy teraz przejście do nowej linii.

Console.WriteLine();

Teraz, kiedy mamy znak, który podał użytkownik, musimy sprawdzić czy jest on w haśle i go wyświetlić.

Musimy utworzyć pętlę, która będzie iterować po haśle. W pętli trzeba utworzyć instrukcje if else if. Poniżej pseudokod:

if (jeśli aktualny znak równa się spacjii)
{
	wyświetl spację.
}
else if (jeśli aktualny znak równa się wpisanemu znakowi)
{
	wyświetl ten znak.
}
else
{
	wyświetl gwiazdkę.
}

Na końcu pętli do while zmniejsz licznik prób i wyświetl odpowiednie komunikaty.

counter = counter - 1;
Console.WriteLine();
Console.WriteLine("Zostało prób: " + counter);
Console.WriteLine();

Jaki będzie warunek pętli while? Program musi kontynuować działanie, jeśli licznik jest większy od zera.

Po wyjściu z pętli do while wyświetl komunikat z prośbą o podanie hasła oraz pobierz tekst z konsoli.

Console.Write("Podaj hasło: ");
string line = Console.ReadLine();

Pobrany tekst porównaj z pierwotnym hasłem i jeśli do siebie pasują wyświetl komunikat o wygranej.

Zadanie 1 

Rozwiązanie zadania 1