motus_bash/launch.sh
2019-11-02 15:11:30 +01:00

213 lines
6 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
#set -x
#************************#
# motus #
# v1.1b #
# #
# 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
motTrouve[$r]=_ #tableau contenant la réponse de lutilisateur, pour garder les bonnes lettres
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 lutilisateur 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 ))
motTrouve[$i]=$lettre
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 ""
}
# ---------------------------------------------------------------- #
# 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
#}
# -------------------------------------- #
# affichagePrec () #
# Affiche les lettres bonnes #
# -------------------------------------- #
affichagePrec () {
for i in `seq 1 ${#mot}`; do # pour les lettres du mot
lettre=${motTrouve[$i]}
#lettre=${tableauMot[$compteur,$i]} # on prend la lettre du tableau
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 à lutilisateur et linsère dans le tableau #
# ----------------------------------------------------------------------- #
entree () {
read motEntre
while [ "${#motEntre}" -ne 6 ]; do
echo "Rentrez un mot de 6 lettres."
read motEntre
echo
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
echo "#########################"
echo " Bienvenue sur Motus ! "
echo "#########################"
echo
echo "Vous devez deviner un mot de 6 lettres !"
echo
while [ $compteur -le ${#mot} ]; do
if [ $correct -eq 1 ]; then
break
else
affichagePrec
entree
check
affichageReponse
compteur=$((compteur+1))
fi
done
#checkMotTrouve
if [ $correct -eq 1 ]; then
echo "Victoire !"
else
echo "Défaite :("
fi