112 lines
3.5 KiB
Bash
Executable file
112 lines
3.5 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Path al file JSON
|
|
FILE_JSON="domande.json"
|
|
# Path al file dei risultati
|
|
FILE_RISULTATI="risultati_quiz.txt"
|
|
|
|
# Verifica se jq è installato
|
|
if ! command -v jq &> /dev/null
|
|
then
|
|
echo "Il comando jq non è installato. Installa jq per proseguire."
|
|
exit 1
|
|
fi
|
|
|
|
# Verifica se Zenity è installato
|
|
if ! command -v zenity &> /dev/null
|
|
then
|
|
echo "Il comando zenity non è installato. Installa zenity per proseguire."
|
|
exit 1
|
|
fi
|
|
|
|
# Imposta quanti quesiti selezionare per ciascun livello
|
|
NUM_FACILI=3
|
|
NUM_MEDIE=2
|
|
NUM_DIFFICILI=1
|
|
|
|
# Inizializza il punteggio e il numero di domande totali
|
|
punteggio=0
|
|
totale_domande=0
|
|
|
|
# Funzione per selezionare domande casuali da una categoria
|
|
seleziona_domande() {
|
|
local livello=$1
|
|
local numero=$2
|
|
jq -c ".domande.$livello | .[]" "$FILE_JSON" | shuf -n "$numero"
|
|
}
|
|
|
|
# Funzione per presentare una domanda e raccogliere la risposta con Zenity
|
|
presenta_domanda() {
|
|
local domanda=$1
|
|
local risposte=("${!2}")
|
|
local corretta=$3
|
|
|
|
# Mostra la domanda con Zenity
|
|
risposta=$(zenity --list --radiolist \
|
|
--title="Quiz Linux by PCOfficina" \
|
|
--text="$domanda" \
|
|
--column="Scelta" --column="Risposta" \
|
|
FALSE "${risposte[0]}" FALSE "${risposte[1]}" FALSE "${risposte[2]}" FALSE "${risposte[3]}" \
|
|
2> /dev/null)
|
|
|
|
# Controlla se la risposta è corretta
|
|
if [ "$risposta" == "$corretta" ]; then
|
|
((punteggio++))
|
|
fi
|
|
|
|
# Incrementa il numero totale di domande
|
|
((totale_domande++))
|
|
}
|
|
|
|
# Gestire le domande senza usare il subshell per mantenere i punteggi
|
|
|
|
# Seleziona domande facili
|
|
domande_facili=$(seleziona_domande "facile" "$NUM_FACILI")
|
|
while read -r riga; do
|
|
domanda=$(echo "$riga" | jq -r '.domanda')
|
|
risposte=($(echo "$riga" | jq -r '.risposte[]'))
|
|
corretta=$(echo "$riga" | jq -r '.corretta')
|
|
|
|
presenta_domanda "$domanda" risposte[@] "$corretta"
|
|
done <<< "$domande_facili"
|
|
|
|
# Seleziona domande medie
|
|
domande_medie=$(seleziona_domande "medio" "$NUM_MEDIE")
|
|
while read -r riga; do
|
|
domanda=$(echo "$riga" | jq -r '.domanda')
|
|
risposte=($(echo "$riga" | jq -r '.risposte[]'))
|
|
corretta=$(echo "$riga" | jq -r '.corretta')
|
|
|
|
presenta_domanda "$domanda" risposte[@] "$corretta"
|
|
done <<< "$domande_medie"
|
|
|
|
# Seleziona domande difficili
|
|
domande_difficili=$(seleziona_domande "difficile" "$NUM_DIFFICILI")
|
|
while read -r riga; do
|
|
domanda=$(echo "$riga" | jq -r '.domanda')
|
|
risposte=($(echo "$riga" | jq -r '.risposte[]'))
|
|
corretta=$(echo "$riga" | jq -r '.corretta')
|
|
|
|
presenta_domanda "$domanda" risposte[@] "$corretta"
|
|
done <<< "$domande_difficili"
|
|
|
|
# Calcola il punteggio massimo possibile (totale_domande * 1 punto per ogni risposta corretta)
|
|
punteggio_massimo=$totale_domande
|
|
|
|
# Richiedi il nome dell'utente
|
|
nome_utente=$(zenity --entry --title="Inserisci il tuo nome" --text="Inserisci il tuo nome utente:" 2> /dev/null)
|
|
|
|
# Verifica che il nome sia stato inserito
|
|
if [ -z "$nome_utente" ]; then
|
|
zenity --error --text="Nome utente non inserito. Il quiz non può essere completato senza nome."
|
|
exit 1
|
|
fi
|
|
|
|
# Mostra il riepilogo finale con il punteggio e le domande corrette
|
|
zenity --info --title="Risultato del Quiz" --text="Domande corrette: $punteggio/$totale_domande\nPunteggio ottenuto: $punteggio\nPunteggio massimo possibile: $punteggio_massimo"
|
|
|
|
# Salva il risultato nel file dei risultati
|
|
echo "$nome_utente:$punteggio/$totale_domande:$punteggio:$punteggio_massimo" >> "$FILE_RISULTATI"
|
|
|
|
# Conferma il salvataggio
|
|
zenity --info --title="Risultato Salvato" --text="Il risultato è stato salvato con successo nel file $FILE_RISULTATI!"
|