Made by @matbagnoletti
Matteo Bagnoletti Tini | matricola n° 377156
Corso di Programmazione Procedurale I° anno a.a. 2024/2025, UniPG - DMI
Progetto finale del corso di Programmazione Procedurale del primo anno di Informatica presso l'Università degli Studi di Perugia.
- gcc (utilizzata v13.3.0) o altro compilatore C analogo
È possibile visualizzare la versione già presente sul proprio dispositivo mediante il seguente comando:
gcc -v
Realizzare un programma in C che simuli il comportamento dell'originale videogioco Prince of Persia permettendo ad uno o più giocatori di fuggire dal castello di Jaffar e raggiungere l'amata principessa. Per una visione più approfondita del testo e delle richieste del progetto, consultare il seguente link.
-
Il programma fa uso dei colori colori ANSI per rendere più chiara la distinzione tra le varie tipologie di messaggi in output. Nel caso in cui il proprio terminale non visualizzi correttamente tali colori, è solitamente possibile modificare le preferenze della shell. Per gli utenti esperti, è possibile modificare i colori di output direttamente nel codice sorgente, modificando i valori delle costanti (
const char* const COLORE_*
) definite ingamelib.h
. In particolare, i colori utilizzati sono:- ROSSO per i messaggi di errore
- VERDE per i messaggi di successo
- GRIGIO per i messaggi informativi
- GIALLO per i messaggi di avvertimento
-
Il codice implementa due funzioni relative allo storico delle vittorie:
void scriviStorico(const char*)
evoid leggiStorico(void)
. La prima permette di memorizzare il nome del giocatore che ha vinto la partita in una specifica data (quella corrente) su di un file di riferimento (storico.csv
). Poiché la seconda funzione citata provvede a leggere solo gli ultimi 3 vincitori,scriviStorico
si avvale di un file temporaneotmp.csv
per memorizzare le informazioni già presenti, che verranno riscritte inappend (a)
nel filestorico.csv
mantenendo un ordine temporale di tipoDESC
(decrescente in base alla data). Il file temporaneo viene automaticamente eliminato.Poiché la scrittura e lettura su file non sono state trattate durante il corso, le funzionalità implementate si basano su ricerche online e suggerimenti automatizzati. I dati memorizzati non sono crittografati e sono facilmente accessibili. Non sono previsti attualmente meccanismi di verifica di duplicati (nei nomi) o di correttezza dei dati.
-
Il gioco considera come vittoria la situazione in cui un generico giocatore raggiunge e sconfigge Jaffar, a prescindere che sia il principe o un doppleganger. I doppleganger, nel caso in cui siano due, gareggiano insieme, per cui la vittoria di uno risulta tale per la categoria nel complesso, e come sconfitta per il principe. In caso di vittoria, il nome del giocatore verrà memorizzato nel file
storico.csv
(vedi punto 1). -
In alcune porzioni di codice sono presenti
switch
concase
non standard, del tipo:switch (espressione) { case 1 ... 3: // codice break; case 4 ... 6: // codice break; default: // codice break; }
L'avviso (warning) che si ottiene (flag
-Wpedantic
) è il seguente:range expressions in switch statements are non-standard [-Wpedantic]
Questo tipo di costrutto permette di eseguire un blocco di codice per un intervallo di valori. È supportato da gcc ma, nel caso in cui si utilizzasse un compilatore differente, è opportuno verificarne la compatibilità.
Per poter utilizzare il programma, è necessario seguire i seguenti passaggi:
- Effettua il clone della repository con il comando:
In alternativa, effettua il download del file compresso del progetto ed estrailo in una cartella locale del tuo computer.
git clone https://www.github.com/matbagnoletti/UniPGPrinceOfInertia.git
- Nel terminale, spostati nella cartella del progetto:
cd UniPGPrinceOfInertia
- Compila il codice sorgente:
gcc -c main.c -Wall -std=c11 gcc -c gamelib.c -Wall -std=c11 gcc -o [eseguibile] main.o gamelib.o
- Esegui il programma:
./[eseguibile]
Questo progetto (e tutte le sue versioni) sono rilasciate sotto la MB General Copyleft License.