Architettura
L’architettura di Progress Quest è progettata per massimizzare la modularità, la scalabilità e la separazione delle responsabilità tra le componenti principali del sistema. Il progetto segue un approccio a componenti, sfruttando il modello ad attori per la gestione della concorrenza e l’automazione del ciclo di gioco.
Panoramica dei Componenti Principali
- UI (ScalaFX): Gestisce l’interfaccia grafica, visualizza lo stato del gioco, riceve input opzionali dall’utente e mostra log, inventario, missioni, ecc.
- Controller: Coordina il flusso del gioco tra UI, Game Loop e Modelli. Contiene sottocontroller specializzati per player, mostri, battaglie, missioni ed eventi.
- Game Loop (Actor System): Coordina l’avanzamento automatico del gioco, gestendo eventi, combattimenti, quest e progressione del personaggio tramite attori Scala/Akka.
- Modelli (Models): Definisce le strutture dati principali (Player, Monster, Inventory, Equipment, Skill, Mondo, ecc.) e le relative logiche di dominio.
- Messaggi (Messages): Rappresenta i messaggi scambiati tra attori per notificare eventi di gioco, aggiornamenti di stato, risultati di combattimento .
- Gestione Eventi: Modulo responsabile della generazione casuale di eventi (combattimento, quest, eventi speciali) e della loro risoluzione.
Schema Architetturale
graph TD;
UI[UI (ScalaFX)] -- invia/mostra eventi --> GameLoop[Game Loop (Actor)]
GameLoop -- aggiorna stato --> Models[Models]
GameLoop -- invia messaggi --> UI
GameLoop -- genera eventi --> Eventi[Gestione Eventi]
Eventi -- aggiorna --> Models
Models -- notifica --> UI
Descrizione dei Componenti
UI (ScalaFX)
- Visualizza lo stato del personaggio, inventario, log eventi, missioni e combattimenti.
- Riceve input opzionali dall’utente durante eventi speciali.
- Comunica con il Game Loop tramite messaggi e aggiornamenti.
Controller
- Coordina il flusso del gioco tra UI, Game Loop e Modelli.
- Contiene sottocontroller specializzati: PlayerController, MonsterController, BattleController, MissionController, EventController, GameLoopController.
- Gestisce la logica di alto livello, come la transizione tra stati (esplorazione, combattimento, quest) e la risoluzione degli eventi.
- Implementa la gestione degli eventi (generazione e risoluzione), integrandosi con il Game Loop e la UI.
Game Loop (Actor System)
- Gestisce il ciclo di gioco automatico (tick periodici).
- Coordina la generazione e la risoluzione degli eventi.
- Gestisce la progressione del personaggio, combattimenti, quest e ricompense.
- Comunica con la UI e aggiorna i modelli.
Modelli (Models)
- Rappresentano le entità principali: Player, Monster, Mondo, Inventory, Equipment, Skill.
- Incapsulano la logica di dominio (es. calcolo danni, gestione inventario, progressione livelli).
Messaggi (Messages)
- Definiscono la comunicazione tra attori (es. inizio combattimento, aggiornamento stato, evento completato).
- Permettono la disaccoppiamento tra componenti e la gestione concorrente degli eventi.
Gestione Eventi
- Genera eventi casuali (combattimento, quest, eventi speciali, allenamento).
- Risolve gli eventi e aggiorna lo stato del gioco di conseguenza.
Flusso Principale del Gioco
- Il Game Loop attiva periodicamente un tick.
- Viene generato un evento casuale (combattimento, quest, ecc.).
- L’evento viene risolto automaticamente (o con input opzionale dell’utente).
- Il risultato aggiorna i modelli (Player, Inventory, ecc.).
- La UI viene aggiornata per riflettere il nuovo stato.
- Il ciclo si ripete fino alla fine della partita (morte del personaggio o chiusura del gioco).