From b52480bae2ccb3ff15c8d8e366f872eb7e9fde19 Mon Sep 17 00:00:00 2001 From: Raggini Marco <93598699+MarkRagg@users.noreply.github.com> Date: Wed, 3 Dec 2025 10:32:06 +0100 Subject: [PATCH 01/28] docs: add sprint 4 --- docs/process/sprint3.md | 2 +- docs/process/sprint4.md | 331 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 332 insertions(+), 1 deletion(-) create mode 100644 docs/process/sprint4.md diff --git a/docs/process/sprint3.md b/docs/process/sprint3.md index cec503b..383d998 100644 --- a/docs/process/sprint3.md +++ b/docs/process/sprint3.md @@ -1,4 +1,4 @@ -# Sprint 2 +# Sprint 3 ## Obiettivo diff --git a/docs/process/sprint4.md b/docs/process/sprint4.md new file mode 100644 index 0000000..3420302 --- /dev/null +++ b/docs/process/sprint4.md @@ -0,0 +1,331 @@ +# Sprint 4 + +## Obiettivo + +L'obiettivo di questo quarto Sprint è di perfezionare il codice per renderlo il più facilmente estendibile e comprensibile. Inoltre si cercherà di aggiungere delle feature opzionali a seconda del tempo rimanente e delle priorità dello stakeholder. + +## Deadline + +La scadenza dello sprint è il 30/11/2025. + +## Backlog + +
| Priorità | +Nome | +Descrizione | +Sprint Task | +Volontario | +Stima iniziale | +Stima Sprint 1 | +Stima Sprint 2 | +Stima Sprint 3 | +Stima Sprint 4 | +
|---|---|---|---|---|---|---|---|---|---|
| 1 | +Organizzazione progetto | +Creare e configurare il repository GitHub, impostare il progetto Scala | +Git Flow Setup | +Francesco | +1 | +0 | +0 | +0 | +0 | +
| Studio dell'architettura | +Marco e Francesco | +4 | +0 | +0 | +0 | +0 | +|||
| Semantic Release e PR rules | +Marco | +2 | +0 | +0 | +0 | +0 | +|||
| Setup documentazione | +Francesco | +2 | +0 | +0 | +0 | +0 | +|||
| Setup progetto Scala | +Marco | +1 | +0 | +0 | +0 | +0 | +|||
| 2 | +Movimento nella mappa | +Come utente, vorrei muovere Pac-Man all'interno della mappa | +Creazione Pac-Man | +Francesco | +4 | +0 | +0 | +0 | +0 | +
| Implementazione posizione e direzione | +Marco | +1 | +0 | +0 | +0 | +0 | +|||
| Creazione mappa | +Marco | +3 | +0 | +0 | +0 | +0 | +|||
| Input utente | +Francesco | +6 | +3 | +3 | +0 | +0 | +|||
| DSL mappa | +Marco | +8 | +3 | +0 | +0 | +0 | +|||
| 3 | +Fantasmi | +Introduzione dei fantasmi nella mappa con movimenti semplici | +Implementazione fantasmi | +Marco | +1 | +1 | +0 | +0 | +0 | +
| Creazione logica di movimento semplice | +Marco | +3 | +3 | +0 | +0 | +0 | +|||
| 4 | +Muri e tunnel | +Come utente, mi aspetto di non poter oltrepassare un muro e di poter utilizzare i tunnel presenti nella mappa | +Creazione muri e builder | +Marco | +4 | +4 | +0 | +0 | +0 | +
| Gestione delle collisioni | +Francesco | +7 | +4 | +3 | +0 | +0 | +|||
| Creazione dei tunnel | +Marco | +3 | +3 | +0 | +0 | +0 | +|||
| 5 | +Punti | +Introduzione dei punti e dello score che permettono di concludere il gioco | +Creazione punti e assegnazione score | +Francesco | +1 | +1 | +0 | +0 | +0 | +
| 6 | +Gestione generale del gioco | +Creazione di un manager che gestisce tutti gli elementi implementati in precedenza | +Implementazione del game manager | +Francesco | +10 | +10 | +0 | +0 | +0 | +
| Creazione di un game loop | +Marco | +3 | +3 | +0 | +0 | +0 | +|||
| 7 | +Documentazione | +Creare una documentazione chiara ed esaustiva | +Documentazione | +Francesco | +4 | +4 | +3 | +2 | +0 | +
| Documentazione | +Marco | +4 | +4 | +3 | +3 | +0 | +|||
| 8 | +Controller | +Implementare il concetto di stato di gioco per la visualizzazione della vincita, perdita ecc.. | +Implementazione stato di gioco | +Francesco | +6 | +6 | +6 | +0 | +0 | +
| 9 | +Grafica | +Come utente, vorrei poter avere una visualizzazione grafica del gioco | +Visualizzazione della mappa | +Marco | +8 | +8 | +8 | +0 | +0 | +
| Visualizzazione pagina iniziale | +Marco | +3 | +3 | +3 | +0 | +0 | +|||
| Schermata vincita/perdita | +Marco | +2 | +2 | +2 | +0 | +0 | +|||
| 10 | +Refactor | +Come sviluppatore, vorrei avere un codice pulito e leggibile | +Refactor codice | +Francesco | +0 | +0 | +5 | +3 | +0 | +
| Refactor codice | +Marco | +0 | +0 | +0 | +5 | +0 | +|||
| 11 | +Opzionali | +Come utente, vorrei avere una versione più avanzata del gioco | +Vite Spacman | ++ | 4 | +4 | +4 | +4 | +0 | +
| Pallino mangia fantasmi | ++ | 5 | +5 | +5 | +5 | +0 | +|||
| Fantasmi: logiche di movimento avanzate | ++ | 5 | +5 | +5 | +5 | +0 | +
+
### Creazione entità del gioco
@@ -15,17 +15,22 @@ Qualsiasi entità di gioco viene rappresentata nell'applicazione come un'interfa
L'unica di queste entità per cui è stato utilizzato l'approccio dei **Factory Methods** è il `Wall`, grazie alla quale è possibile creare interi set di muri continui a partire solamente da due posizioni.
-
+
### Game Manager
+### Collisions Manager
+
### Ghost Behavior
## Controller
+
+
### Flusso di gioco
+
- `GameController`: Tiene traccia dello stato in cui si trova il gioco e chiama i metodi della `GameView` per cambiare la schermata. Quando inizia la partita crea un'istanza di `GameLoop` e anche di `InputManager` per l'interpretazione dei comandi dati dall'utente.
-- `GameLoop`: Il suo scopo principale è quello di gestire il ciclo di vita di una partita implementando un'ordine temporale agli eventi che accadono. In particolare utilizza `GameManager` per controllare lo stato della partita(vittoria/sconfitta) e gestire i movimenti dei fantasmi e dello SpacMan che vengono eseguiti ogni x secondi, dove x è una costante. Alla fine di ogni ciclo viene chiamata l'`update()` per aggiornare in modo continuo e costante l'interfaccia grafica.
+- `GameLoop`: Il suo scopo principale è quello di gestire il ciclo di vita di una partita implementando un'ordine temporale agli eventi che accadono. In particolare utilizza `GameManager` per controllare lo stato della partita(vittoria/sconfitta) e gestire i movimenti dei fantasmi e dello SpacMan che vengono eseguiti ogni x secondi, dove x è una costante. L'`InputManager` per muovere Spac-Man in base all'input del giocatore. Per ultimo, alla fine di ogni ciclo viene chiamata l'`update()` per aggiornare in modo continuo e costante l'interfaccia grafica.
### Input Manager
@@ -45,9 +50,12 @@ GridMapper: Utilizzato per convertire le coordinate fisiche (pixel) in coordinat
- `SpriteLoader`: si occupa di cercare e caricare tutti gli sprite che verranno poi visualizzati nell'interfaccia grafica. Questo oggetto non solo si occupa del caricamento, ma anche di **caching** per evitare rallentamenti grafici e rendere il gioco scalabile.
### Creazione componenti UI
+
- `ButtonFactory`: crea bottoni con stili predefiniti, è possibile specificare una dimensione al bottone che è sempre predefinita, ma possono essere aggiunte altre dimensioni. In questo momento sono presenti le dimensioni **Big** e **Normal**.
- `LabelFactory`: crea label con stili predefiniti. In questo caso non è possibile specificare una dimensione, ma sono stati creati più metodi per la creazione di label con diverso utilizzo. Questa decisione è stata presa per l'esigenza che le label di uno specifico tipo (ad es. `titleLabel` o `scoreLabel`) avessero tutte la stessa dimensione e lo stesso stile.
+
+
0. [Introduzione](../README.md)
1. [Processo di sviluppo](1-processo.md)
2. [Requisiti](2-requisiti.md)
diff --git a/docs/6-testing.md b/docs/6-testing.md
index 75eed15..86991e0 100644
--- a/docs/6-testing.md
+++ b/docs/6-testing.md
@@ -1,9 +1,11 @@
# Testing
## Tecnologie utilizzate
+
Per quanto riguarda il testing è stata utilizzata la libreria `ScalaTest`, uno dei tool più popolari per il testing in Scala. I vantaggi che abbiamo riscontrato usando questa libreria sono la semplicità di utilizzo e la leggibilità del codice che viene prodotto. Inoltre, i `Matchers` hanno reso possibile un ulteriore miglioramento nella leggibilità dei test grazie a asserzioni come `shouldBe` e `should`.
## Metodologie di testing
+
Per la scrittura dei test ci siamo ispirati all'approccio Test Driven Development (TDD). L'approccio non è stato sempre seguito in modo rigido, ma si è cercato sempre di scrivere i test contemporaneamente all'implementazione.
Sono state adottate diverse contromisure per essere sicuri che l'intera applicazione fosse ben testata e stabile:
@@ -14,4 +16,13 @@ Sono state adottate diverse contromisure per essere sicuri che l'intera applicaz
## Risultati coverage
Per quanto riguarda la coverage dell'applicazione si è cercato di dare enfasi al testing delle classi del model. Il controller e la view sono state testate attraverso test manuali e grafici, questo perchè i test servivano principalmente per feedback grafici.
-// TODO mostrare i risultati della coverage attraverso file o immagini e dire la percentuale media di coverage del model.
\ No newline at end of file
+// TODO mostrare i risultati della coverage attraverso file o immagini e dire la percentuale media di coverage del model.
+
+0. [Introduzione](../README.md)
+1. [Processo di sviluppo](1-processo.md)
+2. [Requisiti *(prev)*](2-requisiti.md)
+3. [Design architetturale](3-architettura.md)
+4. [Design di dettaglio](4-design-dettaglio.md)
+5. [Implementazione *(prev)*](5-implementazione.md)
+6. [Testing](6-testing.md)
+7. [**Retrospettiva (next)**](7-retrospettiva.md)
diff --git a/docs/7-retrospettiva.md b/docs/7-retrospettiva.md
index e69de29..aa59bb2 100644
--- a/docs/7-retrospettiva.md
+++ b/docs/7-retrospettiva.md
@@ -0,0 +1,28 @@
+# Retrospettiva
+
+## Analisi del processo di sviluppo e dello stato attuale
+
+Il processo di sviluppo adottato ha garantito una buona organizzazione e un'efficace coordinazione tra i membri del team. Siamo soddisfatti della metodologia scelta, poiché ci ha permesso di rispettare tutte le scadenze previste. Inoltre, i frequenti confronti interni hanno assicurato un allineamento costante del team.
+
+Le criticità riscontrate maggiormente sono state:
+- Suddividere il lavoro equamente
+- Dover dipendere da un altro membro del team per poter proseguire il proprio lavoro
+
+## Migliorie e lavori futuri
+
+Le funzionalità principali del gioco e tutte le funzionalità opzionali, ad eccezione del sistema a livelli, sono state realizzate. In futuro si potrà migliorare la user interface,per rendere il gioco più accattivante, ed inserire più livelli con mappe differenti.
+
+## Conclusioni
+
+In conclusione, il progetto ha rappresentato un'ottima opportunità per mettere in pratica tecniche e processi di sviluppo affrontati durante il corso. Ha anche consentito di approcciarsi alla progettazione software in modo differente dal solito, dalle fasi iniziali fino alla fine del lavoro, focalizzando l'attenzione principalmente sulla metodologia e sulla qualità del codice.
+
+L'utilizzo dell'approccio TDD, pur non essendo stato applicato in maniera completamente rigorosa, ha contribuito a migliorare la correttezza del codice, a velocizzare il processo di sviluppo e a individuare più rapidamente eventuali errori.
+
+0. [Introduzione](../README.md)
+1. [Processo di sviluppo](1-processo.md)
+2. [Requisiti](2-requisiti.md)
+3. [Design architetturale](3-architettura.md)
+4. [Design di dettaglio](4-design-dettaglio.md)
+5. [Implementazione](5-implementazione.md)
+6. [Testing *(prev)*](6-testing.md)
+7. [Retrospettiva](7-retrospettiva.md)
diff --git a/docs/img/Flusso.png b/docs/img/Flusso.png
new file mode 100644
index 0000000000000000000000000000000000000000..531e16064ceebaa028eb20d04f9b3c9d655e828b
GIT binary patch
literal 670863
zcmcFscOcbm`_Jjf$_Sx|Q+8${o6|y3R1z{D71?{Q(^4rktjq?o_sYyHTgWCm+p)Lb
zeI}mwecs>mK5zZ=JSWcgd*AnUeXh?n?(4oiQMoKnPI{Ph&z?Qx7ZlE2-LvOl&7M8`
z=ZN=#pM0ZSbJ(+oYR`ppr&S#ZCc242*=~o4&cx&yzIu7^v|om#q)^Bg{lM;ELJ|lm
z>Ep=9%uk=t5YpUxN)0_PMWrM7*~xH^O|hpQJYVw4W!i(%rK7P9p`>1qZ`nt$O&ade
zus6ID?;@cpy)o2OAk@9ld~K^YJ1#hB-d23scMkysN=yZVdtyE)Xv1Z8{Qw4sxe<_%
zY<~mwRm40Y8yoHs?6cqK{rvv?GF|u?%*$Z+Jqc`tV0X`8h8fg=o9!GGyaK)op{B-9
z1M^{&OhExVFWhfF2*8f+o-xd?(DT9Wmqm&|_SKj@H*j%o@OeUCSz+>t
zh6Z@ZXK?XgwtFCcOeh|h%Cl&xj32VTCONTmSVzMBbajlZ%iZNX179ZDzU1~ZN`XWK
zB6zQK>mb*Ss)4;f!?(hlO0$zTRK=#w%Rekkph<2-`98zOcYTJ*$P6zi@%-cB$?U*n
z_3OvUMQ9xArR_ ~8N?=C&M>u}qfA|44D~&gD2z2`Kc1vhPu58Iy$7FPjss0RO;m!|!~|3*__DgBLg(tPm7b>$KXj_o_SGZOq!weFxR$Cl
z#y1KEsFgMJ%C0}9x+p+FzPYsio|0TQcg&!#_?
z?oZ5$Sxya%H&vL;uTlcqxO(8R#f)m&poCXHvF(i?j~C)vQcfz8BcXY`lNtEf6GUOo
zkb39uO=om
uJE}|9VZ&kE4j!
zL^W<)Z#{O}Cu;mB(5tyQx8Irm>)~r^KU^snH@|=L;{SNyoDXHB)m(P?U5iZ5&0Pur
z
F;R$^a#s}{5S%zKj(@W(vbXR?HJ=!fgNKXFNou{C7CT`j^uvT
46WCeF!+5phZmZa~DXcXWomyxbW_?<;QkT_ls&UJ59
z-1Z;4rTl7dXvB3K@mx;e3YP}({t_R>X|H}2B!PCsn;H#+3vmHLLpy%F%=I%`8w`dzA^bhg>
z-?sfDEYkagX1E7WolkzS=+`-C)HG6x)C~0?UMt_
8vh7>f@+Wh{hz=bl>QWM8GLI5d*16he*y?1Y|}BZmCE(NW>jWgU^0rXneiyIF
z2B81@v8uJ_4RgyDbN*gyk
3|5z%I7F|$dra}5UI2?&3eqYT<$y?e0N4(a=NR$tyN)+
zSPoJlRuCqo&Dl-AT#lP;mh-v__!aH0G;VX|e_xq|G@QQ`qK0}Fz_+D}CycF}*0qkH
zo-tRsypO*Nc}8h4ocmomV{mPnqFdeeu+?dEUBi@Qo>?08o2@~!c$HW88~JFipSZrv
z5n4h?oD-Xv(OZpNjMsH(joC|;H0;kqII?{i?a!ubvmmt9txFA-pUb`9yrQ9&Yf%2t#I^BiGJ`*Zr6;lX}uBHD2bscBWr8i
zs&&QL!k_vws@?#?Jd-4iBID~wrfBxSOHoJi??jO^jR`cR_TE<4@+avFSgTYi