<aside> 🧩
Player, Weapon, Potion, __str__, @property, Eccezioni).import).<aside> 🧠
<aside> 📢
Questo esercizio introduce una nuova metodologia di lavoro e tre nuovi elementi strutturali:
Lavorerete in coppia simulando un piccolo team di sviluppo:
Introdurremo due nuove classi per gestire l’architettura:
GameController (nel nuovo file controller.py)
while True:) e di coordinare il Model e la View.ConsoleView (nel nuovo file view.py)
input()) e output (print()).Il codice esistente (Player, Weapon, ecc.) dovrà essere ripulito da tutti i comandi di print() e input() che violano la Regola 2 del Pattern MVC.
</aside>
L’obiettivo principale è separare completamente la logica del gioco (Model) dalla sua presentazione (View). Alla fine dell’esercizio, l’applicazione non sarà più un singolo script nel main.py, ma un sistema modulare organizzato in tre livelli distinti, rendendola scalabile e mantenibile.
Questo esercizio è pensato per essere affrontato in un lavoro di gruppo da due studenti, ma se sei da solo non ti preoccupare, puoi affrontarlo lo stesso facendo prima uno e poi l’altro.
GameController)Il ruolo del Backend Specialist è quello di implementare la Logica Applicativa. Deve assicurarsi che il cuore del gioco sia gestito correttamente, libero da dipendenze sull’interfaccia utente.
| Componente | File | Ruolo MVC | Dipendenze (importa) | Non contiene MAI |
|---|---|---|---|---|
| Model | player.py, weapon.py, etc. |
Dati e Regole di Business | Nessuno | print(), input() |
| Controller | controller.py |
Coordinamento e flusso di gioco | Model (Player, Weapon, ecc.) e View (ConsoleView) |
Logica di formattazione del testo o in generale di output. |
Il Controller è l’unico che può “chiamare” sia i metodi del Model che quelli della View.
GameControllerLa classe GameController gestisce l’intero ciclo di gioco.
| Metodo | Responsabilità | Dettagli |
|---|---|---|
__init__(self, view, player1, player2) |
Inizializzazione | Riceve un’istanza della View e i due Player come parametri. Salva tutti questi oggetti come attributi interni. |
start_game_loop(self) |
Ciclo principale | Esegue il while True: principale. Deve chiamare view.show_welcome() all’inizio e gestire i turni alternati fino alla fine del gioco. |
handle_turn(self, attacker, defender) |
Logica di Turno | Chiama i metodi del Model (attacker.attack(defender)) e poi chiama i metodi della View per mostrare l'esito (self.view.show_attack_result(...)). |
View)Il ruolo del Frontend Specialist è implementare l’Interfaccia e gestire tutte le comunicazioni con l’utente (mostrando output e richiedendo input), garantendo una presentazione chiara e accattivante, senza mai prendere decisioni sulla logica di gioco.