Jak vytvořit hru na hádání čísel v Pythonu?

Možná jste již tušili, o čem bude tento článek. Pravděpodobně jste se již setkali s hádáním čísel a možná vás zajímá, jak takovou hru naprogramovat v Pythonu.

Pojďme se společně naučit, jak vytvořit hru na hádání čísel od úplného začátku.

Hra s hádáním čísel

Princip hry je velmi jednoduchý. Uživatel se snaží uhodnout náhodně vygenerované číslo, které se nachází v rozmezí od 1 do 100. A to je vlastně vše.

Je to opravdu tak prosté?

Ano, skutečně je.

Nicméně, je zde jedna věc, kterou musíme uživatelům poskytnout, aby měli šanci číslo uhodnout. Jsou to nápovědy. Uživatel by měl dostat informaci, zda je jeho aktuální tip menší nebo větší než hledané číslo. Díky tomu se může orientovat, jakým směrem má zkusit hádat.

Můžeme hru udělat ještě zajímavější, pokud přidáme další funkce, jako je omezený počet pokusů, možnost rozšířit rozsah čísel, nastavení časového limitu, a podobně.

Nejprve se ale zaměříme na vytvoření základní verze hry. Jakmile bude hotová, můžeme se pustit do přidávání dalších funkcí. V této části se tedy budeme věnovat tvorbě základní verze. Poté se podíváme na přidávání vylepšení.

Doporučuji vám, abyste se pokusili hru vytvořit bez toho, aniž byste slepě kopírovali kód. Proto vám nejprve vysvětlím samotný algoritmus. To by vám mělo pomoci buď samostatně hru naprogramovat, nebo alespoň rychleji pochopit kód.

Pojďme se tedy podívat na algoritmus pro vytvoření hry s hádáním čísel.

Algoritmus

Než začneme s kódováním, je klíčové, abyste rozuměli algoritmu.

  • Nejprve definujeme rozsah čísel, ze kterého budeme vybírat. Standardně to bude 1-100, ale můžeme jej změnit.
  • Poté náhodně vygenerujeme celé číslo z tohoto rozsahu (1-100).
  • Na začátku hry zobrazíme uživateli zprávu „Hadejte číslo od X do Y“. Text zprávy můžete samozřejmě upravit.
  • Vytvoříme proměnnou, kterou nastavíme na 0, abychom mohli počítat celkový počet pokusů, které uživatel k uhodnutí čísla použil.
  • Nyní vstoupíme do nekonečné smyčky.
    • V rámci smyčky vyzveme uživatele, aby zadal svůj tip.
    • Pokud se uživatelský tip shoduje s náhodně vygenerovaným číslem, pogratulujeme uživateli zprávou dle našeho výběru, například: „-> Výborně! Uhodl jsi to na 5 pokusů!“
    • Po gratulaci uživateli smyčku ukončíme.
    • Pokud je uživatelský tip menší než vygenerované číslo, zobrazíme zprávu „-> Vaše číslo je menší než hledané číslo“ nebo jinou zprávu se stejným významem.
    • Pokud je uživatelský tip větší než vygenerované číslo, zobrazíme zprávu „-> Vaše číslo je větší než hledané číslo“ nebo jinou zprávu se stejným významem.
    • Nakonec zvýšíme počet uživatelových pokusů o jedna.

Po seznámení se s algoritmem byste měli mít v hlavě představu o tom, jak by mohl kód vypadat. Netrapte se, pokud nemáte kompletní představu o kódu. Důležité je, abyste rozuměli samotnému algoritmu.

Je čas přejít od teorie k samotnému kódu. Pusťme se do toho bez zbytečných okolků.

Kód

Zkoušeli jste sami napsat kód?

Pokud ano a jste s ním spokojeni, je to skvělé. Můžete si projít náš kód, porovnat jej se svým a tím si rozšířit obzory.

Pokud jste kód nenapsali, nic se neděje. Podívejte se na níže uvedený kód a pokuste se mu porozumět. Poté se ho můžete pokusit upravit a napsat po svém, abyste si ho lépe osvojili.

Pojďme se tedy podívat na kód.

import random


class NumberGuessingGame:

    def __init__(self):
        ## define the range
        self.LOWER = 1
        self.HIGHER = 100

    ## method to generate the random number
    def get_random_number(self):
        return random.randint(self.LOWER, self.HIGHER)

    ## game start method
    def start(self):
        ## generating the random number
        random_number = self.get_random_number()

        print(
            f"Hádejte náhodně vygenerované číslo v rozmezí od {self.LOWER} do {self.HIGHER}")

        ## heart of the game
        chances = 0
        while True:
            user_number = int(input("Zadejte svůj tip: "))
            if user_number == random_number:
                print(
                    f"-> Výborně! Uhodl jsi to na {chances + 1} pokus{'y' if chances > 1 else ''}!")
                break
            elif user_number < random_number:
                print("-> Vaše číslo je menší než hledané číslo")
            else:
                print("-> Vaše číslo je větší než hledané číslo")
            chances += 1

## instantiating and starting the game
numberGuessingGame = NumberGuessingGame()
numberGuessingGame.start()

Určitě jste si všimli několika věcí z uvedeného kódu.

  • Rozsah čísel je definován uvnitř metody __init__, takže je přístupný pro všechny metody v rámci této třídy.
  • Díky tomu můžeme rozsah snadno změnit na jednom místě, a změna se projeví v celé aplikaci.
  • Pro generování náhodného čísla byla vytvořena samostatná metoda, což je v souladu se zásadou oddělení zodpovědností. V našem případě má metoda sice jen pár řádků kódu, ale v budoucnu se může rozrůst.
  • Použili jsme třídu, aby všechny metody související se hrou byly sdruženy na jednom místě. Tím se zvyšuje přehlednost kódu a umožňuje jeho snadnější opětovné použití v jiných aplikacích.

Všechny body uvedené výše se týkají psaní čistého kódu. Měli bychom se vždy snažit psát kód, který je srozumitelný i po několika letech.

Ukázkový výstup hry může vypadat následovně.

$ python number_guessing_game.py 
Hádejte náhodně vygenerované číslo v rozmezí od 1 do 100
Zadejte svůj tip: 50
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 75
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 90
-> Vaše číslo je větší než hledané číslo
Zadejte svůj tip: 85
-> Vaše číslo je větší než hledané číslo
Zadejte svůj tip: 80
-> Výborně! Uhodl jsi to na 5 pokusů!

Předpokládám, že máte nainstalovaný Python, abyste si mohli vyzkoušet výše uvedený kód.

Rozšíření hry o další funkce

Nyní přidáme omezení počtu pokusů, které má uživatel k dispozici pro uhodnutí čísla. Pokud uživatel číslo neuhodne v rámci daného limitu, prohrává hru.

Jak to uděláme?

Je to jednoduchý proces, který se skládá ze dvou kroků. Pojďme se na ně podívat.

  • Nejprve definujeme maximální počet pokusů, které má uživatel k dispozici.
  • Před tím, než se uživatelovi umožní další tip, zkontrolujeme, zda mu ještě nějaký pokus zbývá. Pokud už mu žádný pokus nezbývá, hru ukončíme a uživatel prohrává.

Následující doplňkový kód zajistí přidání této funkcionality.

  • Přidáme následující řádek do metody __init__.
self.MAX_CHANCES = 10
  • Následně přidáme následující podmínku před dotazem na další tip od uživatele.
if chances == self.MAX_CHANCES:
                print("-> Bohužel! Prohrál jsi hru. Došly ti pokusy")

Nyní zkuste hru hrát tak, že neuhodnete správné číslo. Měli byste vidět výstup podobný tomu níže.

$ python number_guessing_game.py 
Hádejte náhodně vygenerované číslo v rozmezí od 1 do 100. Máte 10 pokusů.
Zadejte svůj tip: 1
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 2
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 3
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 4
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 5
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 6
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 7
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 8
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 9
-> Vaše číslo je menší než hledané číslo
Zadejte svůj tip: 10
-> Vaše číslo je menší než hledané číslo
-> Bohužel! Prohrál jsi hru. Došly ti pokusy

Výborně! Do naší hry jsme přidali další funkci. Ale to rozhodně není konec. Můžete přidat další funkce, aby byla hra pro uživatele ještě poutavější. Nyní je řada na vás. Pusťte se do toho a udělejte hru ještě zajímavější :).

Závěr

Vytvořili jsme jednoduchou hru na hádání čísel. Nyní je řada na vás. Zkuste si vzpomenout na hry, které jste hráli v dětství. Naprogramujte je pomocí programovacího jazyka a podělte se o ně se svými přáteli. Většinu našich dětských her můžeme digitalizovat.

Dále se můžete podívat na Python IDE a online kompilátory pro spouštění kódu v Pythonu.

Přeji vám příjemné kódování 🙂

Pokud se nemůžete nabažit virálních slovních hádanek, zde je návod, jak se zlepšit ve hře Wordle.

Líbil se vám tento článek? Co ho takhle sdílet se světem?