Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
b52480b
docs: add sprint 4
MarkRagg Dec 3, 2025
e924a34
refactor: remove duplicate codes
MarkRagg Dec 3, 2025
798356f
docs: complete initial sprint 4 docs
MarkRagg Dec 3, 2025
d250340
style: codes style
MarkRagg Dec 3, 2025
e5bc8ff
refactor: checkGameState become more functional
MarkRagg Dec 3, 2025
ade1603
refactor: add cons in factory
MarkRagg Dec 3, 2025
9d571d5
Merge pull request #40 from Fracarlucci/refactor/general-refactor
Fracarlucci Dec 3, 2025
ccc1495
chore: add trait Life
MarkRagg Dec 3, 2025
bdd83d5
chore: add spawnPoint in GameMap
MarkRagg Dec 4, 2025
6a4b46c
chore: now GameManager handle spacman with life
MarkRagg Dec 4, 2025
6c9ff0c
chore: fix last test
MarkRagg Dec 4, 2025
9d0188a
feat: implement lives in SpacMan
MarkRagg Dec 4, 2025
60877d1
Merge pull request #41 from Fracarlucci/feature/life-implementation
Fracarlucci Dec 5, 2025
a065682
feat: add DotPower
Fracarlucci Dec 6, 2025
e8a4c3b
feat: add ghosts spawn points in GameMap
Fracarlucci Dec 6, 2025
e777174
feat: implementation of fruit that add a life
MarkRagg Dec 6, 2025
4c5bcf6
Merge pull request #42 from Fracarlucci/feature/life-implementation
Fracarlucci Dec 6, 2025
bfa88e4
feat: add GhostCollision in ChaseState and DotPowerCollsion
Fracarlucci Dec 6, 2025
35fd6d3
Merge remote-tracking branch 'origin/develop' into feature/power-dots
Fracarlucci Dec 6, 2025
8e33888
refactor: remove duplicated code in GameManagerTest
Fracarlucci Dec 6, 2025
34e288c
refactor: simplify DotPower test in GameManagerTest
Fracarlucci Dec 6, 2025
be6370f
feat: add continuos movement to ghosts
Fracarlucci Dec 7, 2025
040d918
feat: add continuous movement to SpacMan
Fracarlucci Dec 7, 2025
3d0f0e3
Merge pull request #43 from Fracarlucci/feature/power-dots
MarkRagg Dec 7, 2025
7e66a3e
feat: add a real map
MarkRagg Dec 7, 2025
c82f987
fix: add missing resource in SpriteLoader
Fracarlucci Dec 7, 2025
d368b5b
feat: add different behaviours for ghosts
Fracarlucci Dec 7, 2025
dbec596
chore: update delays for entities
Fracarlucci Dec 7, 2025
5f9efdb
refactor: refactor moveGhosts and moveSpacMan in GameManager
Fracarlucci Dec 7, 2025
b94dc60
refactor: change DSL into a more strong one
MarkRagg Dec 8, 2025
9314280
refactor: better code formatting
Fracarlucci Dec 8, 2025
4750774
Merge pull request #44 from Fracarlucci/feature/new-movement-logic
MarkRagg Dec 8, 2025
6519df8
Merge branch 'develop' into feature/new-map
Fracarlucci Dec 8, 2025
b0de7f7
Merge pull request #45 from Fracarlucci/feature/new-map
Fracarlucci Dec 8, 2025
ec39c6f
docs: update architettura and design di dettaglio
Fracarlucci Dec 8, 2025
305c2ca
Merge branch 'develop' into feature/doc
Fracarlucci Dec 8, 2025
b20112c
fix: fix external walls in level1
Fracarlucci Dec 8, 2025
8a8f87d
chore: remove useless GhostForTest
Fracarlucci Dec 8, 2025
bc3474f
feat: add score to GhostBasic
Fracarlucci Dec 8, 2025
24b18f5
fix: update tests with the new GhostBasic
Fracarlucci Dec 8, 2025
e22c6b9
Merge pull request #46 from Fracarlucci/feature/power-dots
MarkRagg Dec 10, 2025
92bcaf9
docs: update 4-chapter
MarkRagg Dec 10, 2025
7452853
docs: create a skeleton for chapter 5
MarkRagg Dec 10, 2025
04ce5af
docs: (raggini) panoramica dei contributi
MarkRagg Dec 10, 2025
d93a79c
docs: gameLoop doc
MarkRagg Dec 11, 2025
5907b9f
docs: add GameMap doc
MarkRagg Dec 11, 2025
0fb9424
docs: add retrospettiva and design di dettaglio diagrams
Fracarlucci Dec 11, 2025
eafe5e7
docs: update impl docs
MarkRagg Dec 12, 2025
ba8d765
docs: (raggini) gui doc
MarkRagg Dec 12, 2025
7dcd294
docs: (raggini) contributi entità di gioco
MarkRagg Dec 13, 2025
84d4c2a
docs: (raggini) finish impl doc
MarkRagg Dec 13, 2025
71b3bb2
docs: fix grammar
MarkRagg Dec 13, 2025
c3a3bd7
docs: SpriteLoader doc
MarkRagg Dec 13, 2025
d80e5d5
feat: add CollsionManager
Fracarlucci Dec 14, 2025
cc0060e
refactor: remove useless return from methods in GameManager
Fracarlucci Dec 14, 2025
4724aec
refactor: move collision logic to CollisionManager
Fracarlucci Dec 14, 2025
b7f5662
refactor: move InputManager to controller
Fracarlucci Dec 14, 2025
546d0d7
refactor: remove useless arg in .place
MarkRagg Dec 14, 2025
cf0eddf
refactor: better codes on WallBuilder
MarkRagg Dec 14, 2025
dc803d8
refactor: add consts for magic numbers
MarkRagg Dec 14, 2025
29c6214
fix: fix GameManagerTest
Fracarlucci Dec 14, 2025
f861695
refactor: refactor codes and add docs
MarkRagg Dec 14, 2025
8e558d5
refactor: add GameState to GameManager
Fracarlucci Dec 14, 2025
bd17df7
test: add CollisionsManagerTest
Fracarlucci Dec 14, 2025
264bcdc
Merge remote-tracking branch 'origin/refactor/general-refactor' into …
Fracarlucci Dec 14, 2025
ce62df1
feat: add scalafix
Fracarlucci Dec 14, 2025
72b57d6
fix: remove unused imports and variables
Fracarlucci Dec 14, 2025
64d0ef2
docs: update index
Fracarlucci Dec 14, 2025
b68dd92
Merge branch 'feature/refactor-game-manager' into feature/doc
Fracarlucci Dec 14, 2025
7c1654c
Merge pull request #47 from Fracarlucci/feature/refactor-game-manager
MarkRagg Dec 14, 2025
b4f796d
docs: documenting codes
MarkRagg Dec 14, 2025
a546630
docs: updating docs
MarkRagg Dec 14, 2025
efe4cbc
refactor: fix names
MarkRagg Dec 14, 2025
1b25ac1
refactor: add crlf in config
MarkRagg Dec 14, 2025
6aa1e6e
style: styling codes
MarkRagg Dec 14, 2025
09e835a
docs: update design di dettaglio
Fracarlucci Dec 14, 2025
09f7171
Merge branch 'feature/doc' of github.com:Fracarlucci/PPS-23-Spac-Man …
Fracarlucci Dec 14, 2025
e1bf271
docs: add coverage
MarkRagg Dec 14, 2025
3714b69
docs: update sprint 4
MarkRagg Dec 14, 2025
00c94da
docs: integrate scalafix
MarkRagg Dec 14, 2025
77850d3
docs: add license
MarkRagg Dec 14, 2025
b3169c9
chore: update version and assembly
MarkRagg Dec 14, 2025
b8b59ed
docs: add docs in spacman
MarkRagg Dec 14, 2025
26c565f
style: rename file
MarkRagg Dec 14, 2025
f6c4af2
Merge pull request #48 from Fracarlucci/refactor/general-refactor
Fracarlucci Dec 14, 2025
4a1325e
Merge branch 'develop' into feature/doc
MarkRagg Dec 14, 2025
fa093e7
docs: add doc implementazione
Fracarlucci Dec 14, 2025
23bf784
Merge branch 'feature/doc' of github.com:Fracarlucci/PPS-23-Spac-Man …
Fracarlucci Dec 14, 2025
4033458
docs: add comments
Fracarlucci Dec 14, 2025
90f9d59
fix: fix typo
Fracarlucci Dec 14, 2025
29343e1
fix: fix indentation
Fracarlucci Dec 14, 2025
7fee2bd
Merge pull request #49 from Fracarlucci/feature/doc
Fracarlucci Dec 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .scalafix.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
rules = [
DisableSyntax,
LeakingImplicitClassVal,
ProcedureSyntax,
NoValInForComprehension
]
1 change: 1 addition & 0 deletions .scalafmt.conf
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ rewrite.rules = [SortImports]
newlines.source = keep
maxColumn = 100
align.multiline = false
lineEndings = windows

indent {
main = 4
Expand Down
21 changes: 21 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2025 PPS-23-Spac-Man

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ Di seguito sono riassunti i principali elementi e funzionalità dell'applicazion

Funzionalità addizionali, nel caso avanzi del tempo:

- [ ] Oggetti che permettono di mangiare i nemici (cambiamento di stato dei fantasmi)
- [ ] Vite del giocatore ed oggetti per recuperarle
- [ ] Comportamenti differenti per ciascun fantasma
- [x] Oggetti che permettono di mangiare i nemici (cambiamento di stato dei fantasmi)
- [x] Vite del giocatore ed oggetti per recuperarle
- [x] Comportamenti differenti per ciascun fantasma
- [ ] Altre mappe

## Autori
Expand All @@ -32,6 +32,8 @@ Funzionalità addizionali, nel caso avanzi del tempo:
3. [Design architetturale](docs/3-architettura.md)
4. [Design di dettaglio](docs/4-design-dettaglio.md)
5. [Implementazione](docs/5-implementazione.md)
- [Francesco Carlucci](./docs/implementazione/carlucci.md)
- [Marco Raggini](./docs/implementazione/raggini.md)
6. [Testing](docs/6-testing.md)
7. [Retrospettiva](docs/7-retrospettiva.md)

Expand Down
14 changes: 12 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,20 @@ ThisBuild / scalaVersion := "3.3.5"
lazy val root = project
.in(file("."))
.settings(
name := "spac-man",
version := "0.1.0-SNAPSHOT",
name := "PPS-23-Spac-Man",
version := "1.0.0",
libraryDependencies += "com.github.sbt" % "junit-interface" % "0.13.2" % Test,
libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.18" % Test,
libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "3.0.0",
libraryDependencies += "org.jline" % "jline" % "3.25.1"
)

scalacOptions ++= Seq("-Wunused:all", "-Werror")

inThisBuild(
List(
scalaVersion := "3.3.5",
semanticdbEnabled := true,
semanticdbVersion := scalafixSemanticdb.revision
)
)
13 changes: 8 additions & 5 deletions docs/1-processo.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,24 +40,25 @@ Al termine di ogni sprint, vengono inoltre redatti una **Sprint Review** e una *

In una prima fase di analisi e progettazione, il gruppo ha svolto un meeting iniziale finalizzato alla definizione dell’architettura generale del progetto, durante il quale sono stati stabiliti anche la durata degli sprint e le modalità delle iterazioni successive.

Il team ha deciso di adottare *sprint settimanali*, ad eccezione del primo, della durata di due settimane, necessario per le configurazioni iniziali del progetto.
Il team ha deciso di adottare *sprint settimanali/bisettimanali* in base alle disponibilità del team.

La scelta di organizzare sprint brevi è stata motivata dall’obiettivo di sviluppare funzionalità in tempi ridotti e ottenere feedback frequenti dallo stakeholder.
La scelta di organizzare sprint di lunghezza moderata è stata motivata dall’obiettivo di sviluppare funzionalità in tempi ridotti e ottenere feedback frequenti dallo stakeholder, mantenendo un equilibrio tra la qualità del prodotto e la velocità di sviluppo.

## Modalità di revisione in itinere dei task

La revisione del lavoro è stata gestita tramite un meccanismo basato sulle *pull request*.
Ogni funzionalità è stata sviluppata in un branch dedicato e successivamente integrata nel branch *develop*, consentendo ai membri del team di lavorare in parallelo senza interferire con il flusso principale.

Al termine di ciascuno sprint, le modifiche consolidate in *develop* sono state unite nel branch *main* mediante *pull request*.
Per essere approvata, ogni *pull request* ha dovuto ricevere l’approvazione di tutti i membri del gruppo.
Al termine di ciascuno sprint, le modifiche consolidate in *develop* sono state unite nel branch *main* mediante *pull request*.
Per essere approvata, ogni *pull request* su develop ha dovuto ricevere l’approvazione di tutti i membri del gruppo.
Questo approccio ha garantito un aggiornamento costante tra i membri e un ulteriore livello di controllo e validazione del codice prima della sua integrazione definitiva.

## Scelta degli strumenti di test, build e Continuous Integration (CI)

Per il **testing automatico** è stato scelto **ScalaTest**, strumento noto e facilmente integrabile con l’ambiente di sviluppo.
Come **build tool** è stato adottato **sbt**, pensato specificamente per progetti Scala.
Per mantenere una formattazione coerente del codice è stato impiegato **scalafmt**, che assicura uno stile uniforme all’interno del team.
Per corregge possibili errori di stile e sintassi è stato integrato **scalafix**, che segnala come warning al programmatore problemi di sintassi, miglioramenti nella sicurezza del codice, cleanup del codice non utilizzato.

L’intero progetto e la relativa relazione sono stati gestiti tramite **GitHub**.
Per automatizzare i processi di test e controllo qualità, è stata configurata una pipeline di Continuous Integration mediante **GitHub Actions**, la quale si attiva automaticamente a ogni nuova *pull request* sul branch di sviluppo.
Expand All @@ -67,7 +68,7 @@ I workflow configurati eseguono le seguenti azioni:
- **Build e test**: compilazione e test automatici del codice su più piattaforme (Ubuntu, Windows, macOS) e versioni di Java (17 e 21), garantendo compatibilità cross-platform e prevenendo regressioni. Il processo viene eseguito a ogni push, assicurando un monitoraggio continuo dello stato del software.
- **Controllo della formattazione**: verifica della conformità del codice agli standard di formattazione definiti dal team tramite il comando `scalafmtCheckAll`, per mantenere una codebase coerente e leggibile.
- **Validazione dei commit**: implementazione di un controllo automatico sui messaggi di commit, secondo le specifiche di **Conventional Commits**, al fine di garantire chiarezza e coerenza nella cronologia del progetto.
- **Rilascio automatico**: al momento del merge di una *pull request* sul branch *main* viene eseguito un rilascio automatico tramite **Semantic Release** che aggiorna la versione del software, genera le note di rilascio e pubblica il pacchetto, semplificando la gestione delle release e garantendo una documentazione accurata di ogni nuova versione
- **Rilascio automatico**: al momento del merge di una *pull request* sul branch *main* viene eseguito un rilascio automatico tramite **Semantic Release** che aggiorna la versione del software e genera le note di rilascio, semplificando la gestione delle release e garantendo una documentazione accurata di ogni nuova versione.

---

Expand All @@ -77,5 +78,7 @@ I workflow configurati eseguono le seguenti azioni:
3. [Design architetturale](3-architettura.md)
4. [Design di dettaglio](4-design-dettaglio.md)
5. [Implementazione](5-implementazione.md)
- [Francesco Carlucci](./implementazione/carlucci.md)
- [Marco Raggini](./implementazione/raggini.md)
6. [Testing](6-testing.md)
7. [Retrospettiva](7-retrospettiva.md)
6 changes: 4 additions & 2 deletions docs/2-requisiti.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ Il dominio del progetto si basa sui seguenti elementi principali:

- Renderizzare graficamente il labirinto, Pac-Man, i fantasmi e gli elementi collezionabili
- Aggiornare la visualizzazione del punteggio
- Mostrare il menu iniziale con le opzioni "Gioca" ed "Esci"
- Mostrare il menu iniziale con il pulsante "Gioca"

## Requisiti non funzionali

- **RNF1 - Prestazioni**
- Il tempo di risposta ai comandi dell’utente deve essere inferiore a 200 ms.
- Il tempo di risposta ai comandi dell’utente deve essere sufficientemente rapido.

- **RNF2 - Usabilità**
- I controlli devono essere intuitivi.
Expand Down Expand Up @@ -115,5 +115,7 @@ Il dominio del progetto si basa sui seguenti elementi principali:
3. [**Design architetturale (next)**](3-architettura.md)
4. [Design di dettaglio](4-design-dettaglio.md)
5. [Implementazione](5-implementazione.md)
- [Francesco Carlucci](./implementazione/carlucci.md)
- [Marco Raggini](./implementazione/raggini.md)
6. [Testing](6-testing.md)
7. [Retrospettiva](7-retrospettiva.md)
27 changes: 18 additions & 9 deletions docs/3-architettura.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,30 @@ Questa separazione facilita la manutenibilità e l'estensibilità del codice, co

## Struttura del progetto

<img src="./img/Design_architetturale.png" alt="Struttura del progetto" style="width: 40%; display: block; margin: 0 auto;">

<div style="text-align: center;">
*Struttura del progetto evidenziando Controller (blu); Model (rosso); View (giallo)*
</div>

---

Come da pattern MVC, la struttura del progetto è divisa in 3 moduli principali:

- Model: contiene le parti logiche del gioco.
- `GameMap`: rappresenta la mappa di gioco e si occupa di mantenerla aggiornata, fornendo anche metodi utili per posizionare/prendere/spostare gli elementi al suo interno.
- **Model**: contiene le parti logiche del gioco.
- `GameManager`: si occupa di gestire i movimenti all'interno del gioco (sfruttando la `GameMap`) e l'eventuale vittoria/sconfitta.
- `GameMap`: rappresenta la mappa di gioco e si occupa di mantenerla aggiornata, fornendo anche metodi utili per posizionare/prendere/spostare gli elementi al suo interno.
- `GhostBasic`: rappresenta i fantasmi all'interno del gioco.
- `SpacMan`: rappresenta il Pacman all'interno del gioco.
- `Position2D` e `Direction`: rappresentano la posizione e la direzione di un'entità di gioco.

- Controller: coordina la comunicazione tra Model e View.
- `GameController`: si occupa di gestire le varie schermate di gioco, comunicando con la view per la rappresentazione grafica.
- `GameLoop`: si occupa di far comunicare il `GameManager` e la `GameView`, viene chiamata dal `GameController` quando inizia una nuova partita, permettendo una rappresentazione fluida del gioco.
- `InputManager`: si occupa di raccogliere l'input del giocatore e trasformarlo in un movimento effettivo.
- **Controller**: coordina la comunicazione tra Model e View.
- `GameController`: si occupa di gestire le varie schermate di gioco, comunicando con la view per la rappresentazione grafica e con il `GameManager` per la logica di gioco.
- `GameLoop`: si occupa di gestire l'esecuzione del gioco in tempo reale.
- `InputManager`: si occupa di prendere l'input del giocatore e mapparlo nella direzione corrispondente.

- View: contiente i componenti per la rappresentazione grafica dell'applicazione:
- **View**: contiente i componenti per la rappresentazione grafica dell'applicazione:
- `GameView`: è il componente principale della view, contiene la rappresentazione grafica del gioco.
- `SpriteLoader`: reperisce le immagini per gli sprites
- `SpriteLoader`: reperisce le immagini per gli sprites.

---

Expand All @@ -41,5 +48,7 @@ Come da pattern MVC, la struttura del progetto è divisa in 3 moduli principali:
3. [Design architetturale](3-architettura.md)
4. [**Design di dettaglio (next)**](4-design-dettaglio.md)
5. [Implementazione](5-implementazione.md)
- [Francesco Carlucci](./implementazione/carlucci.md)
- [Marco Raggini](./implementazione/raggini.md)
6. [Testing](6-testing.md)
7. [Retrospettiva](7-retrospettiva.md)
Loading