Commentaires sur Time to sleep

    Reproches

    Haaaaaaan tu perds déjà tes bonnes résolutions d'un article par jour. Bravo la France !

    Posté par Ingrod, 10 février 2009 à 16:33 | | Répondre
  • oubli dans le script...

    Le script complet :

    #!/bin/sh

    # Baptiste Gaultier et Jean-Nicolas des Pommare, 26/10/2006

    # Projet de Mastermind
    echo ""
    echo "Mastermind de la mort qui tue"
    echo ""
    echo "-------------"
    echo "b(leu),r(ouge),v(ert),j(aune) et m(agenta) comme couleurs possibles, c pour revenir au choix precedent et q pour quitter"
    echo "-------------"
    echo ""

    # -------------------------------------
    # Déclaration des variables nécessaires
    # -------------------------------------

    # Tableau qui contient la combinaison que l'on doit trouver
    declare -a tableau[3]
    # Tableau qui contient la reponse que l'on donne à la machine dans les iterations du programme
    declare -a reponse[3]
    # Tableau utilise pour l'ecriture des couleurs
    declare -a reponsecopie[3]
    # Tableau qui permet de déduire les pions noirs et blancs a partir du premier tableau
    declare -a tab2[3]

    # Variables pour le nombre de blancs et de noirs
    noirs=0
    blancs=0

    # Variables pour rejouer ou non une fois une partie terminee
    jouer=1

    # Iterateur pour compter le nombre de coups joues
    iterateur=0

    # Iterateur pour compter le nombre de pions donnes
    it=1

    # Variable qui sera utilisee pour le random
    rand=0

    # Variable pour remplir la serie a trouver
    val=0

    # -------------------------------------
    # Initialisation des tableaux
    # -------------------------------------

    tab2[0]=10
    tab2[1]=10
    tab2[2]=10
    tab2[3]=10

    tableau[0]=10
    tableau[1]=10
    tableau[2]=10
    tableau[3]=10

    # -------------------------------------
    # Creation de la solution a trouver
    # -------------------------------------

    while [ $val -lt 4 ]
    do
    rand=$(($RANDOM % 4))
    if [ ${tableau[$rand]} -gt 4 ]
    then tableau[$rand]=$(($RANDOM % 5))
    val=$(($val + 1))
    fi
    done

    # Pour voir la solution, il suffit de la commande ci-dessous
    # echo "${tableau[*]}"

    # ------------------------------------
    # Début de la boucle de jeu
    # ------------------------------------

    # Tant que l'on veut jouer...

    while [ $jouer -eq 1 ]
    do

    # Et tant que on n'a pas tente dix solutions...

    while [ $iterateur -lt 10 ]
    do
    echo "essai numero $iterateur"
    # Alors on peut proposer une solution

    while [ $it -lt 5 ]
    do
    echo -n "Couleur numero $it : "
    # Pour lire en entree clavier une couleur :
    read couleur
    # On transforme avec le case la couleur rentree en chiffre qui lui correspond
    case $couleur in
    b) ncouleur=0
    reponse[$(($it-1))]=$ncouleur
    it=$(($it + 1));;
    r) ncouleur=1
    reponse[$(($it-1))]=$ncouleur
    it=$(($it + 1));;
    v) ncouleur=2
    reponse[$(($it-1))]=$ncouleur
    it=$(($it + 1));;
    j) ncouleur=3
    reponse[$(($it-1))]=$ncouleur
    it=$(($it + 1));;
    m) ncouleur=4
    reponse[$(($it-1))]=$ncouleur
    it=$(($it + 1));;
    c) it=$(($it - 1));;
    q) jouer=0
    iterateur=10
    echo -e "\033[0m" "Fin du jeu"
    it=5;;
    # Si ce n'est pas une couleur valide, alors :
    *) echo "seulement b(leu),r(ouge),v(ert),j(aune) et m(agenta) comme couleurs possibles, c pour revenir au choix precedent et q pour quitter";;
    esac
    done
    # Reinitialisation de $it pour la prochaine boucle
    it=1

    # Initialisation des pions noirs et blanc pour la boucle en cours
    noirs=0
    blancs=0


    # If en cas d'arret du jeu pendant la saisie de la reponse de l'utilisateur pour ne pas faire tout ce qui suit et directement arreter le script
    if [ $jouer -ne 0 ]
    then

    # Copie du tableau de la solution dans un tableau secondaire pour calculer la reponse
    for i in 0 1 2 3
    do
    tab2[$i]=${tableau[$i]}
    done

    # Copie du tableau de la reponse de l'utilisateur dans un tableau secondaire pour calculer la reponse
    for i in 0 1 2 3
    do
    reponsecopie[$i]=${reponse[$i]}
    done



    # -------------------------------
    # Calcul du nombre de pions noirs
    # -------------------------------

    for i in 0 1 2 3
    do
    # Si un pion de la reponse de l'utilisateur est le meme que celui de la solution
    if [ ${tab2[$i]} -eq ${reponse[$i]} ]
    # on incremente le nombre de pions noirs
    # on detruit ce pion a l'aide d'une valeur extreme pour ne pas le reutiliser au calcul des pions blancs
    then noirs=$(($noirs + 1)) && tab2[$i]=666 && reponse[$i]=666
    fi
    done


    # --------------------------------
    # Calcul du nombre de pions blancs
    # --------------------------------

    # Premier for pour parcourir l'ensemble de la reponse de l'utilisateur
    for i in 0 1 2 3
    do
    # Deuxieme for pour comparer avec les pions de la solutions
    for j in 0 1 2 3
    do
    # Si un pion de la reponse de l'utilisateur est egal au pion courant de la solution
    if [ ${tab2[$j]} -eq ${reponse[$i]} ]
    # Et s'il n'a pas ete utilise pour les pions noirs
    then if [ ${reponse[$i]} -ne 666 ]
    then if [ ${tab2[$j]} -ne 666 ]
    # Alors on incremente la valeur de blanc
    then blancs=$(($blancs + 1))
    # On rend inutilisable le pion de la solution pour les autres pions de la reponse de l'utilisateur
    tab2[$j]=666
    # On rend inutilisable le pion de la reponse utilisateur pour le reste des autres pions de la solution pour qu'il ne soit pas compte plusieurs fois
    reponse[$i]=666
    fi
    fi
    fi
    done
    done

    # Initialisation des variables pour l'ecriture de la reponse avec les couleurs
    rep=""
    im=0

    # tant que les quatre couleurs ne sont pas ecrites :
    while test $im != 4
    do
    # On recupere la valeur de la reponse
    rep=${reponsecopie[$im]}
    case $rep in
    # On passe la couleur de fond de la couleur du chiffre de la reponse, on passe deux espaces pour creer le pion et on reinitialise la couleur de fond.
    "0") echo -ne "\033[44m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "1") echo -ne "\033[41m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "2") echo -ne "\033[42m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "3") echo -ne "\033[43m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "4") echo -ne "\033[45m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "*") echo "Ceci n'est pas une couleur valide";;
    esac
    done

    echo -n " "

    # Ecriture des pions noirs et blancs
    echo -ne "\033[40m" ; echo -ne "\033[37m" ; echo -ne "$noirs" "\033[0m"
    echo -ne "\033[47m" ; echo -ne "\033[30m" ; echo -ne "$blancs" "\033[0m"


    # ----------------------------
    # Cas de victoire
    # ----------------------------

    # Si il y a 4 noirs, donc 4 bien places, alors c'est gagne !

    if [ $noirs -eq 4 ]
    then echo ""
    # possibilite de rejouer
    echo "Vous avez gagne ! Il vous a fallu $iterateur coups"
    echo "Rejouer ? o/n"
    # lecture depuis clavier : o pour rejouer, n quitter
    read rejouer
    case $rejouer in
    # on laisse jouer a 1, donc la boucle principale recommencera
    # on reinitialise iterateur a -1, car avant la fin de la boucle il y aura une iteration de faite
    "o") iterateur=-1;
    jouer=1;;
    "O") iterateur=-1;
    jouer=1;;
    # on passe a 0 jouer et a 10 iterateur, donc la boucle iterateur s'arretera sans avoir lu le cas ou le joueur venait a perdre (il faudrait que iterateur soit a 9), puis la boucle principale s'arretera puisque jouer est a 0 et on lira l'instruction "exit 0"
    "n") iterateur=10;
    jouer=0;;
    "N") iterateur=10;
    jouer=0;;
    *) echo "On va rejouer dans le doute..."
    iterateur=-1
    jouer=1;;
    esac
    fi

    # Cas ou le joueur a essaye des reponses
    # il a perdu

    if [ $iterateur -eq 9 ]
    # Ecriture de la bonne combinaison
    then echo ""
    echo "Dommage, vous avez perdu ! La reponse etait :"
    # reinitialisation de la variable utilisee plus haut
    im=0
    while test $im != 4
    do
    rep=${tableau[$im]}
    case $rep in
    "0") echo -ne "\033[44m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "1") echo -ne "\033[41m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "2") echo -ne "\033[42m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "3") echo -ne "\033[43m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "4") echo -ne "\033[45m" ; echo -ne " " "\033[0m"; im=$(($im+1));;
    "*") echo "Ceci n'est pas une couleur valide";;
    esac
    done
    # Possibilite de rejouer
    echo "... Rejouer ? o/n"
    read rejouer
    case $rejouer in
    "o") iterateur=-1;
    jouer=1;;
    "O") iterateur=-1;
    jouer=1;;
    "n") iterateur=10;
    jouer=0;;
    "N") iterateur=10;
    jouer=0;;
    *) echo "On va rejouer dans le doute..."
    iterateur=-1
    jouer=1;;
    esac
    fi

    # Iteration de "iterateur" pour compter le nombre de coups joues
    iterateur=$(($iterateur + 1))

    echo " "

    fi

    done

    done

    # Code de sortie uniquement lisible par l'arrêt du jeu par le joueur
    exit 0

    Posté par djeen, 10 février 2009 à 22:53 | | Répondre
  • Je sais pas trop ce que tu as fais Billy, mais Google mats des Google ads en bas de cet article (et pas un autre). Demande des sous !

    Posté par Ingrod, 14 février 2009 à 11:03 | | Répondre
  • M. des Pommares! Vous ici? unbelievable. Mais que faites vous de temps pour revenir par ici?

    Sinon pour la pub, je compte en effet soumettre l'idée à google de me donner des sous pour mes folles blagues. En espérant grâce à cette argent pouvoir conquérir le monde rapidement!

    Je reviens bientôt mes bons amis, seulement je suis en période de partiels qui au vue de mes révisions partielles risque d'être difficiles.

    Posté par galouf, 01 mars 2009 à 13:48 | | Répondre
Nouveau commentaire