2019-11-01 12:01:43 +00:00
|
|
|
|
#!/bin/bash
|
|
|
|
|
#set -x
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#************************#
|
|
|
|
|
# motus #
|
2019-11-02 14:11:30 +00:00
|
|
|
|
# v1.1b #
|
2019-11-01 12:01:43 +00:00
|
|
|
|
# #
|
|
|
|
|
# motus mais en bash #
|
|
|
|
|
#************************#
|
|
|
|
|
correct=0 # permet de savoir lorsque le joueur a trouvé le mot
|
|
|
|
|
|
|
|
|
|
mot="null" # le mot à deviner, généré par pickRandom
|
|
|
|
|
|
|
|
|
|
# genere le tableau verif
|
|
|
|
|
for((i=1;i<7;i++)); do
|
|
|
|
|
verif[$i]=0
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
############################
|
|
|
|
|
# Déclaration des couleurs #
|
|
|
|
|
############################
|
|
|
|
|
blanc='\033[0m'
|
|
|
|
|
bleu='\033[34m'
|
|
|
|
|
rouge='\033[31m'
|
|
|
|
|
jaune='\033[33m'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
############################
|
|
|
|
|
# Déclaration du tableau #
|
|
|
|
|
############################
|
|
|
|
|
|
|
|
|
|
declare -A tableauMot
|
|
|
|
|
num_rows=6
|
|
|
|
|
num_columns=6
|
|
|
|
|
|
|
|
|
|
for ((r=1;r<=num_rows;r++)) do
|
|
|
|
|
for ((c=1;c<=num_columns;c++)) do
|
|
|
|
|
tableauMot[$c,$r]=_
|
|
|
|
|
done
|
2019-11-02 14:11:30 +00:00
|
|
|
|
motTrouve[$r]=_ #tableau contenant la réponse de l’utilisateur, pour garder les bonnes lettres
|
2019-11-01 12:01:43 +00:00
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------- #
|
|
|
|
|
# recupIndex () #
|
|
|
|
|
# récupère la ligne où se trouve les lettres #
|
|
|
|
|
# --------------------------------------------- #
|
|
|
|
|
recupIndex () {
|
|
|
|
|
j=1
|
|
|
|
|
while [ "${tableauMot[$((j+1)),1]}" != _ ]; do
|
|
|
|
|
j=$(( j+1 ))
|
|
|
|
|
done
|
|
|
|
|
return $j
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ------------------------------------ #
|
|
|
|
|
# pickRandom () #
|
|
|
|
|
# Choisi un mot au hasard #
|
|
|
|
|
# ------------------------------------ #
|
|
|
|
|
pickRandom () {
|
|
|
|
|
temp=$(wc -w data/dic.txt | cut -d\ -f1) #nombre de ligne du dico
|
|
|
|
|
mot=$(sed -n "$(( (RANDOM%$temp) + 1 ))p" data/dic.txt) # choisi aléatoirement une ligne dans le fichier
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ------------------------------------------------------------------------- #
|
|
|
|
|
# affichageReponse () #
|
|
|
|
|
# Affiche la réponse de l’utilisateur avec la couleur et le son #
|
|
|
|
|
# ------------------------------------------------------------------------- #
|
|
|
|
|
affichageReponse () {
|
|
|
|
|
nbLettresBonnes=0 # permet de savoir le nombre de bonnes lettres
|
|
|
|
|
recupIndex
|
|
|
|
|
j=$?
|
|
|
|
|
for i in `seq 1 ${#mot}`; do # pour les lettres du mot
|
|
|
|
|
lettre=${tableauMot[$j,$i]} # on prend la lettre du tableau
|
|
|
|
|
case "${verif[i]}" in
|
|
|
|
|
1) # bonne lettrei
|
|
|
|
|
nbLettresBonnes=$(( nbLettresBonnes+1 ))
|
2019-11-02 14:11:30 +00:00
|
|
|
|
motTrouve[$i]=$lettre
|
2019-11-01 12:01:43 +00:00
|
|
|
|
echo -en $rouge $lettre $blanc
|
|
|
|
|
paplay data/sound/bon.ogg
|
|
|
|
|
tableauMot[$((j+1)),$i]=$lettre # on met la lettre dans la case suivante
|
|
|
|
|
;;
|
|
|
|
|
2) # lettre présente dans le mot
|
|
|
|
|
echo -en $jaune $lettre $blanc
|
|
|
|
|
paplay data/sound/moyen.ogg
|
|
|
|
|
;;
|
|
|
|
|
*) # lettre absente
|
|
|
|
|
echo -en $bleu $lettre $blanc
|
|
|
|
|
paplay data/sound/mauvais.ogg
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
if [ $nbLettresBonnes -eq 6 ]; then
|
|
|
|
|
correct=1
|
|
|
|
|
fi
|
|
|
|
|
echo ""
|
2019-11-02 14:11:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------- #
|
|
|
|
|
# checkMotTrouve () #
|
|
|
|
|
# vérifie si la variable contenant le mot trouve est bonne #
|
|
|
|
|
# ---------------------------------------------------------------- #
|
|
|
|
|
#checkMotTrouve () {
|
|
|
|
|
# nbLettresBonnes=0
|
|
|
|
|
# for i in `seq 1 ${#mot}`; do
|
|
|
|
|
# lettre=${motTrouve[$i]} #on récupère la lettre du tableau
|
|
|
|
|
# if [ "$lettre" = "${mot:$((i-1)):1}" ]; then #si elle est à son emplacement, on met 1
|
|
|
|
|
# verif[$i]=1
|
|
|
|
|
# nbLettresBonnes=$(( nbLettresBonnes+1 ))
|
|
|
|
|
# fi
|
|
|
|
|
# i=$(( i+1 ))
|
|
|
|
|
# done
|
|
|
|
|
# if [ $nbLettresBonnes -eq 6 ]; then
|
|
|
|
|
# correct=1
|
|
|
|
|
# fi
|
|
|
|
|
#}
|
2019-11-01 12:01:43 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# -------------------------------------- #
|
|
|
|
|
# affichagePrec () #
|
|
|
|
|
# Affiche les lettres bonnes #
|
|
|
|
|
# -------------------------------------- #
|
|
|
|
|
affichagePrec () {
|
|
|
|
|
for i in `seq 1 ${#mot}`; do # pour les lettres du mot
|
2019-11-02 14:11:30 +00:00
|
|
|
|
lettre=${motTrouve[$i]}
|
|
|
|
|
#lettre=${tableauMot[$compteur,$i]} # on prend la lettre du tableau
|
2019-11-01 12:01:43 +00:00
|
|
|
|
echo -n "" $lettre ""
|
|
|
|
|
done
|
|
|
|
|
echo ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------- #
|
|
|
|
|
# check () #
|
|
|
|
|
# Vérifie si les lettres sont à la bonne position ou présente dans le mot #
|
|
|
|
|
# Return : le tableau verif avec 1 si correct, 2 si présent dans le mot #
|
|
|
|
|
# ------------------------------------------------------------------------------- #
|
|
|
|
|
check () {
|
|
|
|
|
recupIndex
|
|
|
|
|
j=$?
|
|
|
|
|
for i in `seq 1 ${#mot}`; do
|
|
|
|
|
lettre=${tableauMot[$j,$i]} #on récupère la lettre du tableau
|
|
|
|
|
if [ "$lettre" = "${mot:$((i-1)):1}" ]; then #si elle est à son emplacement, on met 1
|
|
|
|
|
verif[$i]=1
|
|
|
|
|
elif [[ "$lettre" =~ [$mot] ]]; then #si elle est dans le mot, on met 2
|
|
|
|
|
verif[$i]=2
|
|
|
|
|
else
|
|
|
|
|
verif[$i]=0
|
|
|
|
|
fi
|
|
|
|
|
i=$(( i+1 ))
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ----------------------------------------------------------------------- #
|
|
|
|
|
# entree () #
|
|
|
|
|
# Fait entrer un mot à l’utilisateur et l’insère dans le tableau #
|
|
|
|
|
# ----------------------------------------------------------------------- #
|
|
|
|
|
entree () {
|
|
|
|
|
read motEntre
|
|
|
|
|
while [ "${#motEntre}" -ne 6 ]; do
|
2019-11-02 14:11:30 +00:00
|
|
|
|
echo "Rentrez un mot de 6 lettres."
|
2019-11-01 12:01:43 +00:00
|
|
|
|
read motEntre
|
2019-11-02 14:11:30 +00:00
|
|
|
|
echo
|
2019-11-01 12:01:43 +00:00
|
|
|
|
done
|
|
|
|
|
recupIndex
|
|
|
|
|
j=$?
|
|
|
|
|
# on met le mot dans le tableau
|
|
|
|
|
for i in `seq 1 ${#motEntre}`; do
|
|
|
|
|
tableauMot[$j,$i]=${motEntre:$((i-1)):1}
|
|
|
|
|
i=$(( i+1 ))
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# main
|
|
|
|
|
|
|
|
|
|
compteur=1 # nombre de coups
|
|
|
|
|
|
|
|
|
|
pickRandom
|
2019-11-02 14:11:30 +00:00
|
|
|
|
echo "#########################"
|
|
|
|
|
echo " Bienvenue sur Motus ! "
|
|
|
|
|
echo "#########################"
|
|
|
|
|
echo
|
|
|
|
|
|
|
|
|
|
echo "Vous devez deviner un mot de 6 lettres !"
|
|
|
|
|
echo
|
2019-11-01 12:01:43 +00:00
|
|
|
|
|
|
|
|
|
while [ $compteur -le ${#mot} ]; do
|
|
|
|
|
if [ $correct -eq 1 ]; then
|
|
|
|
|
break
|
|
|
|
|
else
|
|
|
|
|
affichagePrec
|
|
|
|
|
entree
|
|
|
|
|
check
|
|
|
|
|
affichageReponse
|
|
|
|
|
compteur=$((compteur+1))
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
|
2019-11-02 14:11:30 +00:00
|
|
|
|
#checkMotTrouve
|
|
|
|
|
|
2019-11-01 12:01:43 +00:00
|
|
|
|
if [ $correct -eq 1 ]; then
|
|
|
|
|
echo "Victoire !"
|
|
|
|
|
else
|
|
|
|
|
echo "Défaite :("
|
2019-11-02 14:11:30 +00:00
|
|
|
|
fi
|