Il codice (qui puoi scaricare il codice sorgente) implementa il gioco del tris (tic-tac-toe) con un’interfaccia testuale, permettendo a un giocatore umano di sfidare un’intelligenza artificiale (IA) semplificata che sceglie mosse casuali. Ecco il funzionamento del codice, funzione per funzione:
stampa_tabellone(tabellone)
: Questa funzione prende in input il tabellone di gioco e lo stampa sulla console in un formato leggibile. Il tabellone è una lista di liste che contiene le informazioni sulle caselle occupate dai simboli dei giocatori.verifica_vittoria(tabellone, simbolo)
: Questa funzione prende in input il tabellone e un simbolo del giocatore (“X” o “O”) e verifica se il giocatore con quel simbolo ha vinto la partita. Controlla tutte le righe, colonne e le due diagonali per vedere se contengono tre simboli uguali. Se trova una combinazione vincente, restituisceTrue
, altrimentiFalse
.mossa_ia(tabellone)
: Questa funzione rappresenta la logica dell’IA semplificata. Prende in input il tabellone e sceglie casualmente una mossa tra le caselle disponibili. Restituisce le coordinate (riga, colonna) della mossa scelta. Nota che questa IA è molto semplice e non segue alcuna strategia per vincere la partita.gioco()
: Questa è la funzione principale che implementa la logica del gioco. Inizialmente, crea un tabellone vuoto e assegna il turno al giocatore umano con il simbolo “X”. Fino a quando ci sono caselle libere, esegue i seguenti passaggi: a. Stampa il tabellone attuale. b. Se è il turno del giocatore umano, chiede in input un numero tra 1 e 9 che corrisponde alla casella da occupare. Converte il numero in coordinate (riga, colonna) del tabellone. c. Se è il turno dell’IA, chiama la funzionemossa_ia()
per ottenere le coordinate della mossa scelta dall’IA. d. Controlla se la casella scelta è già occupata. Se lo è, chiede al giocatore di scegliere un’altra casella. e. Altrimenti, occupa la casella con il simbolo del giocatore corrente e decrementa il numero di caselle libere. f. Verifica se il giocatore corrente ha vinto la partita chiamando la funzioneverifica_vittoria()
. Se ha vinto, stampa il messaggio di vittoria e interrompe il ciclo. g. Se nessuno ha vinto, passa il turno all’altro giocatore.- Se il ciclo termina senza che nessun giocatore abbia vinto, stampa il messaggio di pareggio.
La strategia adottata in questo codice è semplice e non ottimizzata per far vincere l’IA. L’IA sceglie mosse casuali tra le caselle disponibili, senza alcuna strategia per bloccare il giocatore avversario o cercare di vincere la partita. L’obiettivo principale del codice è di fornire un’implementazione di base del gioco del tris, piuttosto che un’intelligenza artificiale avanzata.
Per migliorare l’IA e renderla più competitiva, potresti implementare un algoritmo di ricerca come il Minimax, che analizza tutte le possibili mosse future e sceglie la mossa ottimale per massimizzare il punteggio dell’IA e minimizzare il punteggio del giocatore avversario. Tuttavia, questo richiederebbe una modifica sostanziale della funzione mossa_ia()
e l’aggiunta di funzioni aggiuntive per calcolare il punteggio delle mosse e simulare le mosse future.