Oggi proveremo a realizzare il gioco noto come Forza 4. Il computer disegna il tabellone di gioco, mentre due giocatori umani si alternano ad effettuare la loro mossa (cliccando sulla colonna dove si vuole inserire il proprio gettone) fino a che uno dei due vince o non ci sono più mosse valide. Quello che dovete fare  è scaricare il file forza4.py e completare sia alcune delle funzioni, sia parte del programma principale (in particolare, dovete scrivere del codice dovunque trovate il commento TODO). Seguite comunque le indicazioni degli esercizi qui sotto.

Matrici per la rappresentazione dello stato del gioco

Il modo in cui il gioco è stato implementato è molto vicino a quello che dovete fare per il progetto d'esame. Una matrice di interi (di solito chiamata board nel codice sorgente), contiene lo stato attuale del gioco, ovvero l'informazione su quali posizioni nel tabellone di gioco sono piene, quali occupate dal giocatore blu e quali dal giocatore rosso. In particolare, se una certa posizione della matrice ha valore 0, vuol dire che quella posizione è vuota, un valore positivo indica che c'è un gettone blu ed un valore negativo indica un gettone rosso. Ad esempio, la matrice

[
[ 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0 ],
[ -1, -1, 0, 0, 1, 0, 0 ],
[ -1, 1, 1, 0, -1, 0, 0 ],
[ -1, 1, 1, 0, -1, 0, 0 ],
[ 1, -1, 1, 0, -1, 1, -1 ]
]

rappresenta la seguente configurazione di gioco:


Tutte le operazioni (controllare se una mossa è valida, aggiungere un gettone alla configurazione, etc...) operano sulla matrice di interi. La funzione show_board si occupa poi di prendere una matrice come argomento e visualizzare sulla finestra grafica dell'applicazione il tabellone di gioco con tutti i gettoni nel posto corretto.

Quando proverete a realizzare il progetto, la cosa più semplice è seguire la stessa idea: una matrice (di interi o booleani) rappresenta la configurazione di gioco (in questo caso la cella può avere solo due stati, vivo o morto, invece di tre come in Forza 4). Tutte le operazioni dovranno avvenire su quella matrice, ed una apposita funzione visualizzerà nella finestra grafica del programma la configurazione passatale come argomento.

Esercizi

Esercizio 1

Creare un file forza4_experiments.py che importa la funzione show_board del file forza4.py e la usa per visualizzare sullo schermo il tabellone di gioco mostrato sopra in questa pagina.

Suggerimento: Si noti che la funzione show_board ha due parametri: la matrice di interi che rappresenta la configurazione di gioco e il canvas sul quale disegnare. Per la prima potete usare la matrice qui sopra, per il secondo è necessario che il programma principale che scriverete in forza4_experiments.py si occupi di creare una finestra ed estrarre il canvas da passare a show_board.

Esercizio 2

All'interno del file forza4.py, scrivete il codice delle funzioni create_empty_board, check_move e move, ed accertatevi che siano corrette utilizzando i testi già pronti forniti nel file test_forza4.py. Quello che deve fare ogni funzione è descritto nella relativa docstring (ma il file con i test può essere usato come ulteriore font di informazioni).

Esercizio 3

All'interno del file forza4.pynella funzione main, scrivete il corpo del while (eliminando l'istruzione pass) in modo che il programma Forza 4 funzioni correttamente.

Esercizio 4

Scrivere una nuova versione del gioco Forza 4 che, invece di utilizzare le funzionalità grafiche della libreria ezgraphics, utilizzi il terminale per l'interazione con l'utente. In particolare:

  • modificare la funzione show_board in maniera che il campo da gioco sia visualizzato sul terminale, usando spazi per le celle vuote, O per i gettoni rossi e X per i gettoni blu. Ad esempio, la matrice di cui sopra potrebbe essere visualizzata come segue:

    | | | | | | | |
    | |X| | | | | |
    |O|O| | |X| | |
    |O|X|X| |O| | |
    |O|X|X| |O| | |
    |X|O|X| |O|X|O|
  • modificare la funzione show_winner in modo che il vincitore venga visualizzato sul terminale.

  • modificare la funzione get_move in modo da chiedere al giocatore con la funzione input in quale colonna vuole inserire il proprio gettone, invece di utilizzare il mouse.

  • eliminare tutti i riferimenti agli oggetti win e canvas da tutto il programma


Last modified: Monday, 11 December 2023, 4:10 PM