Progetto di Sistemi Operativi e Programmazione di Rete, Università di Cagliari, Anno Accademico 2023-2024.
Autori: Francesco Cardia, Matteo Chiesa
Il progetto per essere compilato ha bisogno delle librerie ncurses
e ncursesw
.
Per poter utilizzare la musica e gli effetti sonori occorre installare il media player mpg123
eseguendo il comando:
sudo apt install mpg123
o in alternativa eseguendo dalla directory del gioco il comando:
make install
Il gioco rimarrà al centro del terminale, anche in caso di ridimensionamento della finestra. Se il terminale non sarà abbastanza grande per contenere la schermata di gioco, comparirà un avviso che ne richiederà l'espansione, e in caso di partita in corso verrà messo in pausa.
La navigazione nei menu e le partite sono accompagnate da colonne sonore ed effetti audio.
Il gioco tiene traccia dei migliori punteggi ottenuti nelle partite giocate; quando un giocatore otterrà uno dei migliori punteggi potrà inserire il proprio nome.
Il gioco comprende un menù impostazioni dal quale l'utente può cambiare alcuni aspetti del gioco, tra cui:
- Lingua: è possibile scegliere la lingua di gioco;
- Difficoltà: è possibile scegliere la difficoltà del gioco;
- Skin della rana: è possibile scegliere l'aspetto della rana che si preferisce;
- Colori: è possibile scegliere il colore del menù, e il colore della selezione nel menù;
- Volume: è possibile modificare il volume della musica e degli effetti sonori;
Le impostazioni correnti vengono mantenute anche ai successivi riavvii del gioco.
È possibile mettere in pausa una partita premendo p
, ed uscire dalla partita con q
.
Ogni volta che si accede in lettura ai file contenenti impostazioni o migliori punteggi, se ne controlla la correttezza di formato. In questo modo si evitano irregolarità di codifica e incongruenze nei valori (ad esempio, saranno gestiti i casi in cui nei file sono presenti valori di un'impostazione non corrispondenti ad alcun settaggio possibile nel gioco). La gestione dei dati salvati è dinamica, ne consegue che l'ordine di comparsa di questi dati (impostazioni e migliori punteggi) all'interno dei file è irrilevante.
La funzione usleep
ritorna immediatamente quando il processo riceve un segnale, perciò quando si metteva in pausa il gioco, il timer non scandiva un secondo, ma generalmente meno tempo. Per evitare questo si implementa una funzione che divide il tempo di attesa in intervalli, in modo che il segnale SIGSTOP
possa interrompere il processo tra uno e l'altro.
Nel caso in cui si verifichi un errore (ad esempio nelle chiamate di sistema o nelle funzioni della libreria ncurses) viene eseguita l'uscita dal programma e visualizzato uno specifico messaggio di errore nello standard error.