Gra "Zgadnij liczbę"

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Gra "Zgadnij liczbę"
In Progress

Uwaga: nie znaleziono pasujących materiałów w przesłanych plikach; poniżej znajduje się konwersja dostarczonego tekstu na semantyczny HTML.

Gra: „Zgadnij liczbę”

Napiszemy teraz prostą grę losową, która wykorzystuje wszystko, czego nauczyliśmy się o zmiennych, pętlach, warunkach i interakcji z użytkownikiem.

Opis gry

Komputer „myśli” o losowej liczbie z pewnego zakresu (np. 1–100), a użytkownik próbuje tę liczbę zgadnąć, wpisując kolejne propozycje. Po każdej próbie komputer podpowiada, czy podana liczba jest za mała, za duża, czy prawidłowa. Gra kończy się, gdy użytkownik zgadnie liczbę.

Losowanie liczby

W JavaScript do losowania wykorzystujemy Math.random(), która zwraca liczbę zmiennoprzecinkową z zakresu [0, 1). Aby wylosować liczbę całkowitą 1–100, zrobimy:

let tajnaLiczba = Math.floor(Math.random() * 100) + 1;

Math.random() * 100 daje zakres [0, 100), Math.floor obcina część po przecinku, a +1 przesuwa zakres na [1,100]. W zmiennej tajnaLiczba mamy nasz cel.

Pytanie użytkownika

Skorzystamy z prompt, by pobierać kolejne strzały od gracza. Będziemy to robić w pętli, dopóki nie zgadnie. Potrzebujemy też licznika prób.

Obsługa błędów

  • Użytkownik może wpisać coś, co nie jest liczbą (albo kliknąć Anuluj).
  • Jeśli prompt zwróci null (Anuluj), przerwiemy grę.
  • Jeśli wpis nie da się zamienić na liczbę (isNaN zwróci true), poinformujemy o błędzie i poprosimy o kolejną próbę, nie zwiększając licznika.

Pseudokod gry

wylosuj tajnaLiczba
proby = 0
dopóki (true):
    wpis = prompt("Zgadnij liczbę od 1 do 100:")
    jeśli (wpis === null) przerwij pętlę (użytkownik zrezygnował)
    konwertuj wpis na liczbę
    jeśli (nie liczba) -> alert("To nie jest poprawna liczba!") i kontynuuj pętlę (pomijając resztę)
    proby++
    jeśli (liczba == tajnaLiczba) -> alert("Brawo, zgadłeś!"); przerwij pętlę
    inaczej jeśli (liczba < tajnaLiczba) -> alert("Za mało!")
    inaczej -> alert("Za dużo!")
(koniec pętli)

Implementacja w JavaScript

let tajnaLiczba = Math.floor(Math.random() * 100) + 1;
let proby = 0;
while (true) {
    let wpis = prompt("Zgadnij liczbę od 1 do 100:");
    if (wpis === null) {
        alert("Przerwano grę.");
        break;
    }
    let strzal = Number(wpis);
    if (isNaN(strzal)) {
        alert("To nie jest liczba! Spróbuj ponownie.");
        continue; // wraca na początek pętli, nie zwiększamy licznika
    }
    proby++;
    if (strzal === tajnaLiczba) {
        alert("Brawo! Odgadłeś liczbę " + tajnaLiczba + " w " + proby + " próbach.");
        break;
    } else if (strzal < tajnaLiczba) {
        alert("Za mało!");
    } else {
        alert("Za dużo!");
    }
}

W tym kodzie używamy while(true) z break do przerwania, gdy trzeba. Każdy prawidłowy strzał zwiększa licznik proby. Komunikaty „za mało” i „za dużo” pozwalają graczowi zorientować się, w którą stronę poprawić kolejny strzał. Gdy odgadnie, informujemy go, w ilu próbach to zrobił.

Możliwe ulepszenia

  • Ograniczyć liczbę prób i po jej przekroczeniu zakończyć grę z komunikatem przegranej.
  • Pozwolić użytkownikowi wybrać zakres losowanej liczby.
  • Zapytać, czy użytkownik chce zagrać ponownie.

Takie rozszerzenia możesz spróbować dodać.

Ćwiczenia

  1. Zagraj kilka razy w stworzony „Zgadnij liczbę”. Sprawdź różne scenariusze: odgadnięcie za pierwszym razem, odgadnięcie po wielu próbach, rezygnację z gry (Anuluj), wpisanie niepoprawnych danych (litery zamiast cyfr). Upewnij się, że gra reaguje poprawnie w każdym przypadku.
  2. Zmodyfikuj grę tak, aby ograniczyć maksymalną liczbę prób do 10. Jeśli gracz nie zgadnie w ciągu 10 prób, przerwij pętlę i wyświetl komunikat z właściwą liczbą (np. "Przegrałeś, tajna liczba to ...").
  3. Zmień zakres losowanej liczby na 1–50 lub inny, a następnie dostosuj komunikat w prompt, aby gracz znał nowy zakres. Sprawdź, czy gra nadal działa prawidłowo.
  4. Dodaj pytanie po zakończeniu gry (np. za pomocą confirm), czy użytkownik chce zagrać ponownie. Jeśli tak, wylosuj nową liczbę i zresetuj licznik prób, po czym kontynuuj pętlę; jeśli nie, zakończ działanie. (Wskazówka: można opakować całą logikę gry w zewnętrzną pętlę do...while, która powtarza grę tak długo, jak użytkownik wybiera "OK" w confirm.)