Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/matbagnoletti/grandprix
Applicazione Java che simula una gara di auto da corsa in ambiente multi-thread.
https://github.com/matbagnoletti/grandprix
java javafile multithreading thread vigenere-cipher
Last synced: about 2 months ago
JSON representation
Applicazione Java che simula una gara di auto da corsa in ambiente multi-thread.
- Host: GitHub
- URL: https://github.com/matbagnoletti/grandprix
- Owner: matbagnoletti
- License: other
- Created: 2024-03-06T17:16:17.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-03-08T06:42:55.000Z (10 months ago)
- Last Synced: 2024-03-08T07:38:40.153Z (10 months ago)
- Topics: java, javafile, multithreading, thread, vigenere-cipher
- Language: Java
- Homepage:
- Size: 24.4 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
GrandPrix
Made by @matbagnoletti
Docenti: prof.ssa @mciuchetti e prof.ssa Fioroni
Corso TPSIT a.s. 2023/2024, ITTS A. Volta (PG)
## Descrizione e obiettivi
Applicazione Java che simula una gara di auto da corsa 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.
## Requisiti
- [Java](https://www.oracle.com/it/java/technologies/downloads/) (utilizzata la versione 21.0.2)
- [Maven](https://maven.apache.org/download.cgi) (utilizzata la versione 3.9.6)È possibile verificare la corretta installazione di Java e Maven eseguendo i seguenti comandi da terminale:
```bash
java -version
mvn -v
```## Installazione
1. Scaricare il file compresso del progetto
2. Estrarre il progetto
3. Eseguire il programma:
- Tramite IDE
- Tramite terminale:
1. Naviga nella root del progetto
2. Esegui la build del progetto: `mvn clean install`.
3. Identifica il file `jar` nella directory `target` e avvia la classe Main: `java -jar target/GrandPrix-1.0-SNAPSHOT.jar Main`.## Struttura
Il progetto si compone dalle seguenti classi appartenenti al package `tpsit`:- [Giudice.java](src/main/java/tpsit/Giudice.java): classe che gestisce l'avvio della la gara, la sua gestione e la classifica.
- [Giocatore.java](src/main/java/tpsit/Giocatore.java): classe che identifica l'utente che sta giocando. Ogni utente deve essere necessariamente registrato nel sistema per poterlo utilizzare.
- [Pilota.java](src/main/java/tpsit/Pilota.java): classe che identifica ciascun pilota predisposto dal sistema ed avviato come un Thread per poter concorrere in gara simultaneamente ad altri piloti. Il metodo `run()` verrà utilizzato finché la propria `Auto` (associata come attributo) non terminerà il circuito (vedi metodo `percorri()`), segnalando al `Giudice` ogni qual volta venga completato un giro o altri eventi particolari (pit stop - incidenti).
- [Auto.java](src/main/java/tpsit/Auto.java): classe associata a ciascun `Pilota` dotata di specifici metodi per poter avanzare nel circuito (in modo random), effettuare un pit stop (se possibile) o avere un incidente. Eseguendo un pit stop, per quel giro, la velocità dell'auto sarà ridotta a 0.
- [Cifrario.java](src/main/java/tpsit/Cifrario.java), [Matrice.java](src/main/java/tpsit/Matrice.java) e [Vigenere.java](src/main/java/tpsit/Vigenere.java): classi utilizzate per cifrare e decifrare la password dei giocatori salvata su file. Vedi progetto [Encryption](https://www.github.com/matbagnoletti/Encryption). La nuova versione (v2.0) prevede la codifica di tutti i caratteri ASCII stampabili.- [Circuito.java](src/main/java/tpsit/Circuito.java): classe che rappresenta un generico circuito, creato dall'utente nelle fasi iniziali, 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. Tale funzionalità si disattiva automaticamente quando tutte le auto hanno completato un giro completo.
- [Gara.java](src/main/java/tpsit/Gara.java): classe che rappresenta la gara nel suo complesso, con i metodi per poterla avviare, fermare e gestire.
- [Main.java](src/main/java/tpsit/Main.java): classe principale del progetto, che avvia il gioco.
## Funzionamento
1. All'avvio viene creato un oggetto `Giocatore`. Dopo aver inserito lo username e la chiave di cifratura, il programma procede a ricercare il profilo utente. Nel caso in cui venga trovato viene effettuato l'accesso, altrimenti la registrazione.
- Ogni profilo utente si compone da due file: `.giocatore`, contenente la password cifrata, e `.gare`, contenente i progressi e i dati delle partite giocate dall'utente. Nel caso di primo accesso, il sistema provvederà a creare i due file, utilizzando quello di [default](infogara/default.txt) per i dati delle partite.
2. Il sistema crea un oggetto `Giudice` il quale provvedere a richiedere all'utente di configurare le impostazioni di gara, per poi avviarla.
- Il giudice nella fase di configurazione provvedere a leggere dal file del giocatore i dati delle partite precedentemente eseguite (se presenti), creando tanti oggetti `Pilota` quanto quelli presenti nel file.
- La gara è configurata in modo che pit stop e incidenti non possano avvenire durante il primo o l'ultimo giro.
3. Il giudice, dopo aver atteso la fine della gara, comunica all'utente l'esito ottenuto, terminando il programma dopo aver salvato i progressi.## Documentazione
Questo progetto è stato opportunamente documentato utilizzando lo standard [Javadoc](docs/javadoc/index.html).## Licenza d'uso
Questo progetto (e tutte le sue versioni) sono rilasciate sotto la [MB General Copyleft License](LICENSE).