Come creare un gioco di indovinare i numeri in Python?

Probabilmente avrai già intuito l’argomento di questo articolo. E con buona probabilità, avrai già avuto a che fare con l’indovinare numeri, magari cercando un modo per realizzarlo usando Python.

Andiamo a vedere come sviluppare un gioco di indovinare numeri partendo da zero.

Il Gioco dell’Indovina Numero

Il meccanismo del gioco è elementare. L’obiettivo è che l’utente indovini un numero generato in modo casuale, compreso tra 1 e 100. Questo è tutto.

È davvero così semplice?

Sì, lo è.

Tuttavia, dobbiamo fornire un aiuto ai giocatori per raggiungere l’obiettivo. Mi riferisco a dei suggerimenti. È fondamentale indicare all’utente se il numero che ha inserito è inferiore o superiore al numero corretto. In questo modo, l’utente saprà in quale direzione indirizzare i propri tentativi.

Per rendere il gioco più intrigante, potremmo implementare funzionalità aggiuntive, come un limite massimo di tentativi, l’espansione dell’intervallo di numeri, l’introduzione di un timer, e così via.

Tuttavia, è prioritario creare la versione base del gioco. In un secondo momento, potremo aggiungere le altre funzionalità. Di conseguenza, in questa sezione, ci focalizzeremo sulla creazione della versione base, per poi passare all’aggiunta di nuove caratteristiche.

Vorrei che tu provassi a creare il gioco senza copiare passivamente il codice. Pertanto, inizierò spiegando l’algoritmo. Ciò ti aiuterà a scrivere il tuo codice o a capire rapidamente quello che ti fornirò.

Esaminiamo quindi l’algoritmo per sviluppare il gioco dell’indovina numero.

Algoritmo

Assicurati di aver ben compreso l’algoritmo prima di procedere alla fase di codifica.

  • Definisci l’intervallo numerico. In genere, è 1-100, ma puoi personalizzarlo a tuo piacimento.
  • Genera un numero intero casuale all’interno dell’intervallo definito (1-100).
  • Avvia il gioco mostrando all’utente un messaggio come “Indovina il numero tra X e Y”. Ovviamente, puoi personalizzare il messaggio a tuo piacimento.
  • Inizializza una variabile a 0 per tenere traccia del numero totale di tentativi effettuati dall’utente per indovinare il numero.
  • Implementa un ciclo infinito.
    • Chiedi all’utente di inserire un numero.
    • Se il numero inserito corrisponde al numero generato casualmente, congratulati con l’utente con un messaggio a tua scelta. Ad esempio, “-> Congratulazioni! Hai indovinato in 5 tentativi!”.
    • Interrompi il ciclo dopo aver comunicato la vittoria all’utente.
    • Se il numero inserito è inferiore al numero generato casualmente, invia all’utente un messaggio come “-> Il tuo numero è inferiore al numero casuale”, o un messaggio personalizzato con lo stesso significato.
    • Se il numero inserito è superiore al numero generato casualmente, invia all’utente un messaggio come “-> Il tuo numero è superiore al numero casuale”, o una frase personalizzata con lo stesso significato.
    • Infine, incrementa il numero di tentativi effettuati dall’utente.

Dopo aver esaminato l’algoritmo, dovresti avere un’idea del codice da scrivere. Non preoccuparti se non hai un codice completo in mente. L’importante è aver compreso l’algoritmo.

È ora di passare alla pratica con il codice. Iniziamo subito a programmare.

Codice

Hai provato a scrivere il codice?

Se hai risposto sì e lo hai anche completato, ottimo! Analizza il codice e cerca di comprenderlo a fondo, in modo da arricchire ulteriormente le tue conoscenze.

Non preoccuparti se non hai scritto il codice. Guarda il codice fornito di seguito e cerca di capirlo. Prova a modificarlo e a scriverlo a modo tuo per una migliore comprensione.

Quindi, vediamo il codice.

import random


class NumberGuessingGame:

    def __init__(self):
        ## definisce l'intervallo
        self.LOWER = 1
        self.HIGHER = 100

    ## metodo per generare un numero casuale
    def get_random_number(self):
        return random.randint(self.LOWER, self.HIGHER)

    ## metodo di avvio del gioco
    def start(self):
        ## genera il numero casuale
        random_number = self.get_random_number()

        print(
            f"Indovina il numero generato casualmente tra {self.LOWER} e {self.HIGHER}")

        ## il cuore del gioco
        chances = 0
        while True:
            user_number = int(input("Inserisci il numero che hai indovinato: "))
            if user_number == random_number:
                print(
                    f"-> Evviva! Hai indovinato in {chances + 1} tentativo{'i' if chances > 1 else ''}!")
                break
            elif user_number < random_number:
                print("-> Il tuo numero è inferiore al numero casuale")
            else:
                print("-> Il tuo numero è superiore al numero casuale")
            chances += 1

## crea un'istanza e avvia il gioco
numberGuessingGame = NumberGuessingGame()
numberGuessingGame.start()

Ci sono alcuni aspetti importanti da capire dal codice.

  • L’intervallo è definito all’interno del metodo __init__, in modo da poter essere utilizzato da tutti i metodi della classe.
  • Possiamo facilmente modificarlo in un unico punto, e la modifica si rifletterà di conseguenza in tutta l’applicazione.
  • C’è un metodo dedicato alla generazione del numero casuale, seguendo il principio della “separazione delle responsabilità”. In questo caso, il nostro metodo ha un codice limitato, ma potrebbe crescere in futuro.
  • Infine, abbiamo utilizzato una classe, in modo che tutti i metodi relativi al gioco siano raggruppati al suo interno, facilitandone il riutilizzo in altre applicazioni.

Tutti i punti discussi in precedenza sono legati alla scrittura di codice pulito. È consigliabile sforzarsi di scrivere codice che risulti comprensibile anche a distanza di anni.

Ecco un esempio di output del gioco:

$ python number_guessing_game.py 
Indovina il numero generato casualmente tra 1 e 100
Inserisci il numero che hai indovinato: 50
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 75
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 90
-> Il tuo numero è superiore al numero casuale
Inserisci il numero che hai indovinato: 85
-> Il tuo numero è superiore al numero casuale
Inserisci il numero che hai indovinato: 80
-> Evviva! Hai indovinato in 5 tentativi!

Presuppongo che tu abbia Python installato per provare il codice qui sopra.

Funzionalità Extra

Aggiungeremo un limite massimo di tentativi per indovinare il numero. Se l’utente non indovina il numero entro il limite stabilito, perde la partita.

Come possiamo implementare questa funzionalità?

È un processo molto semplice, che si articola in due fasi. Vediamo quali sono:

  • Definiamo il numero massimo di tentativi che l’utente ha a disposizione per indovinare il numero.
  • Verifichiamo se l’utente ha ancora tentativi a disposizione prima di richiedere l’input successivo. Se l’utente ha esaurito i tentativi, concludiamo la partita.

Il seguente codice aggiuntivo implementerà la funzionalità.

  • Aggiungiamo il codice seguente all’interno del metodo __init__
self.MAX_CHANCES = 10
  • Aggiungiamo la seguente condizione prima che l’utente inserisca il tentativo successivo.
if chances == self.MAX_CHANCES:
                print("-> Phew! Hai perso la partita. Hai esaurito i tentativi")

Ora, prova il gioco senza indovinare il numero corretto. Dovresti visualizzare un output simile a questo:

$ python number_guessing_game.py 
Indovina il numero generato casualmente tra 1 e 100. Hai 10 tentativi per indovinare.
Inserisci il numero che hai indovinato: 1
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 2
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 3
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 4
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 5
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 6
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 7
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 8
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 9
-> Il tuo numero è inferiore al numero casuale
Inserisci il numero che hai indovinato: 10
-> Il tuo numero è inferiore al numero casuale
-> Phew! Hai perso la partita. Hai esaurito i tentativi

Evviva! Abbiamo aggiunto una funzionalità extra al nostro gioco. Ma non è finita qui. Puoi implementare ulteriori funzionalità per rendere il gioco più interessante per gli utenti. Ora tocca a te. Dai sfogo alla tua creatività e rendi il gioco più bello :).

Conclusione

Abbiamo creato un semplice gioco di indovina numero. Ora tocca a te ripensare ai giochi a cui giocavi da bambino. Prova a crearli utilizzando un linguaggio di programmazione e condividili con i tuoi amici. Molti dei giochi della nostra infanzia possono essere digitalizzati.

Quindi, esplora l’IDE Python e i compilatori online per provare a eseguire il codice Python.

Buona programmazione 🙂

Se non ne hai mai abbastanza dei giochi virali con le parole, ecco come migliorare le tue prestazioni in Wordle.

Ti è piaciuto leggere questo articolo? Che ne dici di condividerlo con il mondo?