Spacebots è un programma che simula dei robot nello spazio che ho fatto per l'esame di Metodologie Di Programmazione. In questo spazio ci sono 2 entità: i robot e delle aree.
Le aree possono essere di forma circolare o rettangolare e possiedono una label che è semplicemente una stringa.
I robot sono rappresentati da una forma circolare e essi possono eseguire del codice scritto in una sintassi inventata.
La simulazione viene eseguita manualmente andando avanti o indietro di x step che possono essere decisi dall'utente. Ogni step di simulazione rappresenta un secondo.
Per informazioni più dettagliate potete consultare la specifica di progetto.
Ogni comando deve essere scritto su una riga.
Comando | Descrizione |
---|---|
MOVE x y s | Il robot si muove nella direzione data dal vettore (x,y) alla velocità s |
MOVE RANDOM x1 x2 y1 y2 s | Il robot si muove nella direzione casuale data dal vettore (x,y) generato dal range x1,x2 e y1,y2 e si muove alla velocità s |
SIGNAL label | Il robot segnala label label |
UNSIGNAL label | Il robot smette di segnalare la label label |
FOLLOW label dist s | Il robot si muove muove alla velocità s in una direzione che è la media delle posizioni dei robot che segnalano la condizione label e che si trovano ad una distanza minore o uguale a dist . |
CONTINUE s | Il robot continua a muoversi alla direzione e velocità attuali per s "secondi" |
STOP | Il robot cessa ogni movimento |
REPEAT n | Il codice dentro questo blocco viene eseguito per n volte |
UNTIL label | Il codice dentro questo blocco viene eseguito per fino a quando il robot non entra in contatto con una label label |
DO FOREVER | Il codice dentro questo blocco viene eseguito per sempre |
DONE | Delimita la fine di un loop |
La GUI
Il programma presenta molte funzioni ma non tutte sono state implementate perchè non erano richieste nella specifica del progetto.
In questa tab si possono caricare il programma e le forme da file di testo. L'esplora file si aprirà automaticamente su una cartella dove ho provveduto degli esempi. Ogni esempio ha un file readme con spiegato come far funzionare la simulazione e il comportamento che avranno i robot.
Qui abbiamo tre bottoni: il primo per creare uno sciame aventi il programma caricato il precedenza e creare le aree che avranno come label prova . La scelta delle dimensioni e il numero di robot nello sciame non possono essere modificati da GUI.
Qui ci sarebbe stata l'opzione di eliminare elementi singoli o direttamente tutta la simulazione ma non è stato implementato nulla.
Con la freccia destra possiamo andare avanti nella simulazione in base a quanti step sono stati scelti e con la freccia sinistra si può tornare indietro.
Dentro questa tab ci sarebbero stati i controlli per muovere la telecamera. Si sarebbe potuto ingrandire/rimpicciolire la simulazione e con le frecce muoversi in tutte e quattro le direzioni ma nulla è stato implementato.
Questo è l'esempio più semplice di tutti. I robot rimbalzano a destra e a sinistra come nel gioco pong.
In questo esempio i robot rimbalzano sulla piattaforma sottostante come se fossero delle palline. I robot poi cadranno dall'estremità destra all'infinito.
In questo esempio i robot sciameranno dritti verso i robot dentro al cerchio che stanno segnalando la propria posizione.
Questo è l'esempio più complesso ma anche il più bello. I robot al centro sono "lavoratori alle poste" che segnalano la propria posizione e "consegnano pacchi" ai postini. Quest'ultimi sono i robot all'esterno che sciameranno verso le poste a prendere un pacco per poi partire in una direzione casuale per consegnarlo.
Il codice è pubblico sul mio GitHub.
Il progetto usa Gradle 8.0 e Java 17.
Per avviare l'applicazione basta eseguire il comando:
gradle run
Per sapere di più sul codice consultare la documentazione o generare il javadoc con il comando
gradle javadoc