Skip to content

Latest commit

 

History

History
61 lines (44 loc) · 5.62 KB

README.md

File metadata and controls

61 lines (44 loc) · 5.62 KB

GrandPrix-Gruppo1-5AINF

Made by @matbagnoletti, @RageKB and @IsmailHadeg

Docenti: prof.ssa @mciuchetti e prof.ssa Fioroni

Corso TPSIT a.s. 2023/2024, ITTS A. Volta (PG)

Ultimo commit Java

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.

Descrizione e obiettivi

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.

Struttura del progetto

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.
  • 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 metodo accesso(password). Se restituisce true allora l'utente è autenticato, se restituisce false la password è errata.
    • Se non esiste invece, l'utente dovrà scegliere una password e verrà poi invocato il metodo registrazione(password) affinché venga creato il file dell'utente nel percorso /giocatori/ nel formato username.giocatore.
  • Pilota.java: è un Thread creato dalla classe Giudice.java per poter concorrere in gara simultaneamente ad altri piloti. Il metodo run() verrà utilizzato finché la propria Auto (associata come attributo) non abbia terminato il circuito (vedi metodo percorri()), segnalando al Giudice 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 dal Giudice e, se impostato su true, fa avanzare tutte le auto a 50 m/s, così che nessuna possa superare l'altra.

Utilizzo

Per poter utilizzare il progetto è necessario eseguire il file Giudice.java e seguire le istruzioni stampate a video.

Storico del progetto

Tutte le modifiche degne di nota di questo progetto verranno documentate e rese pubbliche nel file CHANGELOG.md.

Documentazione

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.

Licenza d'uso

Questo progetto (e tutte le sue versioni) sono rilasciate sotto la MB Collective Copyleft License.