PPS-23-Spac-Man

Implementazione - Carlucci Francesco

Panoramica dei contributi

Il mio contributo nel progetto si è focalizzato nelle seguenti aree:

Game Manager

Il GameManager permette di muovere lo SpacMan e i fantasmi, aggiornare lo stato del gioco, gestire le collisioni, sapere se la partita è vinta, persa o in modalità inseguimento (chase) ed aggiornare il tempo di inseguimento.

Per mantenere lo stato del gioco è stata utilizzata la case class GameState, quindi ogni sua modifica, effettuata solamente dal GameManager, ne produce una nuova istanza tramite copy.

I metodi principali del GameManager sono:

Gli elementi di Scala più rilevanti utilizzati sono:

Collisions Manager

Il CollisionsManager si occupa di gestire le collisioni tra le entità del gioco.

I metodi principali del GameManager sono:

Gli elementi di Scala più rilevanti utilizzati sono:

Il GhostBehaviour si occupa di gestire il comportamento dei fantasmi.

I metodi principali del GhostBehaviour sono:

Gli elementi di Scala più rilevanti utilizzati sono:

Game Controller

Il GameController si occupa di inizializzare e gestire il gioco per permettere l’interazione tra View e Model nel pattern architetturale MVC. Quando il giocatore clicca sul tasto Gioca, il GameController inizializza il gioco, fa partire l’InputManager e avvia il loop di gioco tramite un thread separato.

Quando il GameLoop termina la sua esecuzione, il GameController notifica la View per aggiornare lo stato del gioco in base al risultato ottenuto.

private def handleFinalState(
        state: GameState,
        gameManager: GameManager,
        inputManager: InputManager,
        view: GameView
    ): Unit =
        inputManager.stop()
        state match
            case GameState.Win =>
                Swing.onEDT:
                    view.displayWin(gameManager.getState.spacMan.score)
            case GameState.GameOver =>
                Swing.onEDT:
                    view.displayGameOver(gameManager.getState.spacMan.score)
            case _ => ()

Testing

Per quanto riguarda i test è stato largamente utilizzato l’approccio TDD, in quanto ha permesso di velocizzare il debug del codice in seguito a modifiche o aggiunte di funzionalità.

Inoltre la parte di model sviluppata è stata totalmente testata per raggiungere la più alta copertura del codice possibile, fatta eccezione dei rami di codice che riguardano la strategia di Programmazione Difensiva.


  1. Introduzione
  2. Processo di sviluppo
  3. Requisiti
  4. Design architetturale
  5. Design di dettaglio
  6. Implementazione (prev)
  7. Testing
  8. Retrospettiva