Made by @matbagnoletti, @RageKB and @IsmailHadeg
Docenti: prof.ssa @mciuchetti e prof.ssa Fioroni
Corso TPSIT a.s. 2023/2024, ITTS A. Volta (PG)
Caution
Questo progetto è ancora in fase di sviluppo e test. Se ne sconsiglia l'utilizzo fino a quando non ne sarà rilasciata una versione ufficiale.
Questo progetto ha come scopo quello di simulare una gara di auto da corsa in Java in ambiente multi-thread.
Il gioco è composto da un giudice di gara, dei giocatori, dei piloti e le rispettive auto, un circuito e un sistema di cifratura e decifratura delle password.
- È previsto l'utilizzo e la gestione degli stream per la lettura e scrittura dei dati su file. I dati dei piloti e delle loro auto sono memorizzati in un file, così come quelle dei giocatori, le cui password sono cifrate secondo il cifrario di Vigenère.
- Ogni giocatore può scegliere il numero di auto da far partire contemporaneamente e il circuito su cui gareggiano. Quest'ultimo ha una lunghezza che viene preimposta dal giocatore, come anche il numero di giri, il numero di possibili pit stop e la possibilità di truccare una macchina o di fermarne una per un incidente. Deve poi essere eventualmente possibile far intervenire (in un certo punto della gara) la safety car.
- Il giudice di gara deve poter comunicare a tutti i partecipanti e al pubblico l’inizio e la fine della gara, nonché, al termine della gara, il vincitore, salvando i dati della classifica in un file che può essere letto dal giocatore alla fine del gioco.
Il progetto si compone dalle seguenti classi:
-
Giudice.java: è la classe di avvio che gestisce:
- l'account dell'utente sotto forma di
Giocatore
- la lettura da file dei dati dei piloti e delle loro auto
- l'avvio della la gara e la classifica.
- l'account dell'utente sotto forma di
-
Giocatore.java: classe che identifica l'utente che sta giocando. Alla sua istanza dovranno essere passati i seguenti paramentri:
username
dell'utente.verme
del cifrario.
Fatto ciò, verrà invocato il metodo
ricercaGiocatore(username, verme)
per verificare se il FILE con le informazioni dell'utente esiste oppure no.- Nel caso in cui il FILE dell'utente esista, viene richiesta la
password
e poi invocato il metodoaccesso(password)
. Se restituiscetrue
allora l'utente è autenticato, se restituiscefalse
la password è errata. - Se non esiste invece, l'utente dovrà scegliere una
password
e verrà poi invocato il metodoregistrazione(password)
affinché venga creato il file dell'utente nel percorso/giocatori/
nel formatousername.giocatore
.
-
Pilota.java: è un Thread creato dalla classe
Giudice.java
per poter concorrere in gara simultaneamente ad altri piloti. Il metodorun()
verrà utilizzato finché la propriaAuto
(associata come attributo) non abbia terminato il circuito (vedi metodopercorri()
), segnalando alGiudice
ogni qual volta venga completato un giro. -
Auto.java: è una classe associata a ciascun
Pilota
e possiede quei metodi per poter avanzare nel circuito o generare (in modo random) un pit stop (se possibile). Eseguendo un pit stop, per quel round la velocità dell'auto sarà ridotta a 0. -
Cifrario.java, Matrice.java e Vigenere.java: classi utilizzate per cifrare e decifrare la password dei giocatori salvata su file. Vedi progetto Encryption.
-
Circuito.java: è la classe che rappresenta un generico circuito che deve essere creato dall'utente nel main, specificando la lunghezza in metri, il numero di giri, e il numero di pit stop possibili. Possiede un attributo
safetyCar
che viene controllato dalGiudice
e, se impostato sutrue
, fa avanzare tutte le auto a 50 m/s, così che nessuna possa superare l'altra.
Per poter utilizzare il progetto è necessario eseguire il file Giudice.java e seguire le istruzioni stampate a video.
Tutte le modifiche degne di nota di questo progetto verranno documentate e rese pubbliche nel file CHANGELOG.md.
La documentazione di questo progetto è disponibile nella cartella documentazione:
- JavaDoc: documentazione generata automaticamente da JavaDoc. Si può visualizzare aprendo il file
index.html
con un browser. - UML: diagramma UML del progetto.
- Diagramma dei casi d'uso: diagramma dei casi d'uso del progetto.
Questo progetto (e tutte le sue versioni) sono rilasciate sotto la MB Collective Copyleft License.