Dungeon Explorer è un gioco di avventura testuale sviluppato in Java SE, dove il giocatore esplora un dungeon pieno di nemici, stanze, oggetti e sorprese. Il gioco integra diversi pattern di progettazione, tecnologie Java avanzate e buone pratiche di sicurezza.
- Navigazione tra stanze tramite comandi testuali
- Combattimenti a turni contro nemici con strategie dinamiche
- Equipaggiamento e inventario
- Combinazione di oggetti e creazione di oggetti compositi
- Caricamento dinamico di stanze, nemici e oggetti (Reflection + Annotazioni)
- Mappe modulari tramite file JSON
- Salvataggio e caricamento dello stato (Memento + Java I/O)
- Eventi di gioco asincroni e logging esteso
- Input sanitizzato e gestione sicura delle eccezioni
| Tecnologia / Pattern | Descrizione |
|---|---|
| Factory | Creazione dinamica di stanze, oggetti e nemici |
| Composite | Stanze composte (CompositeRoom) e oggetti (CompositeItem) |
| Iterator | Iterazione su stanze e inventario |
| Exception Shielding | GameException e log strutturati |
| Singleton | GameContext condiviso |
| Strategy | Comportamento dei nemici: aggressivo o difensivo |
| Observer | Eventi di gioco: sconfitta nemico, drop oggetti, ecc. |
| Template Method | Gestione comandi tramite AbstractCommandProcessor |
| Memento | Salvataggio e ripristino stato gioco (GameStateMemento) |
| Builder | Costruzione oggetti (ItemBuilder) |
| Reflection | Caricamento dinamico classi annotate |
| Custom Annotations | @AutoLoad per istanziazione automatica |
| IoC / Config | Parametri caricati da game.properties tramite GameConfig |
| Stream / Lambda | Ricerca oggetti in inventario |
| Multithreading | Salvataggio/caricamento asincroni, potenziamenti temporanei |
| Java I/O | Persistenza stato gioco su file binario |
| Logging | Log avanzato con rotazione file e livelli FINE/INFO |
| Sanitizzazione Input | Pulizia input utente via InputSanitizer |
look: osserva la stanza correntestatus: mostra i tuoi HPi: mostra l'inventarioexplore: esplora le stanze interne o collegatego <direzione>: muoviti (es:go north)attack: attacca il nemico presenteuse <nome>: usa un oggettoequip <nome>: equipaggia un oggettotake <nome>: prendi un oggetto dalla stanzacombine <o1> + <o2> = <nuovo>: combina due oggettisave: salva lo stato di giocoload: carica l'ultima partita salvatahelp: mostra i comandiexit: esce dal gioco
- Clona il progetto:
git clone <repo-url> - Compila:
javac -d bin src/**/*.java - Esegui:
java -cp bin manfrinmarco.Main
- Class Diagram (entità principali e relazioni)
- Component Diagram (core, mappa, oggetti, eventi, ecc.)
(i diagrammi sono presenti nella cartella 'Diagrams' in 3 versioni: diagramma 'Pro? con tutte le relazioni e diagramma 'Base' più leggibile. In Più è presente una versione Semplificata per maggiore leggibilità)
- Interfaccia solo testuale (CLI)
- AI nemici semplice, ma estendibile
- Nessun supporto multiplayer o rete
- Test unitari con JUnit per:
Player,Enemy,Inventory,CommandProcessor,GamePersistence,EnemyFactory,ItemFactory
- Mockito per simulazione
EventManagereLogger - Logging di test configurato a livello FINE
- Design Patterns richiesti: ✅ Factory, Composite, Iterator, Exception Shielding
- Tecnologie Java SE: ✅ Collection, Generics, Logging, Java I/O, JUnit
- Sicurezza: ✅ Nessun crash, input sanitizzato, eccezioni schermate
- Caratteristiche avanzate: ✅ Reflection, Custom Annotations, Strategy, Observer, Template Method, Memento, Stream API, Multithreading
© Progetto sviluppato da Marco Manfrin – progetto per l'esame di OOP at Epicode

