Script bash avancé - Page 2

  • Votes
  • Date
  • Date décroissante
  1. Il fait ce qu'il peux........ :-))))))))))))))))))))))))))))))))))))))))
    Mais là je doit dire que je suis content de moi, je l'ai trouvé tout seul sans personne!!!! :)

    C'est toi que je remercie, sans ton exemple je serais surement encore entrain de me casser la tête dessus, ça m'as permis de m'améliorer grandement!
    Y'a encore 2 mois de ça je n'y serait pas arrivé.

    J'ai un séminaire fin février, en espérant le réussir et partir pour brighton pendant 3 mois et pis après je sais pas encore où!

    Donc encore merci et ce fût un plaisir de poster mes résultat ici et surtout d'avoir des réponses, quand j'aurais mis les couleurs je posterais le tout complet et fini ici ou alors je commencerais une nouvelle discussion, aussi je pense y rajouter un niveau de difficultés facile/moyen/dur il me suffiras de bidouiller un peu la variable $life et pis ça seras bon.

    Que UNIX soit avec toi...

    P.s.: si un jour, par hasard, tu trouves un moyen de le faire plus court fais moi signe.
    1. Modérateur
      P.s.: si un jour, par hasard, tu trouves un moyen de le faire plus court fais moi signe.
      Une feuille de papier et un crayon. Pas mieux ;-DDD

      Bonne chance pour la suite et @ quand tu veux ;-)
      1. MDR c'est sur c'est plus court :))

        Je traine souvent sur ccm maintenant, j'essaye d'aider les gens quand je le peux, on se recroiseras surement!

        A+
        1. J'ai un petit souci avec une fonction, celle pour choisir la difficulté.
          function difficulty ()
          {
          echo hello please select a difficulty
          echo insert 1 for easy mode
          echo insert 2 for normal mode
          echo insert 3 for hard mode
          echo insert 4 for kamikaze mode
          read dificulty_mode
          if [ [ dificulty_mode = 1 ]]
            then life=26 && life2=26
          elif [ [ dificulty_mode = 2 ]]
            then life=15 && life2=15
          elif [ [ dificulty_mode = 3 ]]
            then life=7 && life2=7
          elif [ [ dificulty_mode = 4 ]]
            then life=1
          fi
          oneplayer
          }
          

          J'ai essayé sans les "&& " mais ça ne change rien, le probléme est que la variable $life* n'est pas prise en compte et donc rien ne s'affiche, j'ai pourtant fais les changement neccessaire dans oneplayer pour que diffuclty_mode fonctionne mais ça ne marche pas!!!

          Any help is welcome :))))))))))))))
          1. Modérateur
            Salut,

            Déjà :
            if [ [ "$dificulty_mode" = 1 ]]
            serait un plus ;-))

            Et en faisant avec un "case ... esac" plutôt, non ?
            case "$dificulty_mode" in
            1)     life=26
                    life2=26
                    ;;
            2)     life=15
                    life2=15
                    ;;
            etc.
            esac
            ;-))
            1. euh bin en fait oui je viens de remarquer que if [ [ dificulty_mode = 1 ]] c'est pas la même chose if [ [ $dificulty_mode = 1 ]] :)
              encore une faute à la c.., j'avais même pas fait gaffe surtout que quand j'écrit une variable ça devient mauve mais bon c'est pas grave, on va dire que je suis fatigué.
              Et pour le case oui effectivement c un peu plus court, je me disais bien qu'il y avait plus simple, merci encore :)))

              Voilà ce que ça donne:
              function difficulty_mode()
              {
              echo hello please select a difficulty
              echo insert 1 for easy mode
              echo insert 2 for normal mode
              echo insert 3 for hard mode
              echo insert 4 for kamikaze mode
              read dificulty
              case $dificulty in
              1) life=26 && life2=26
               ;;
              2) life=15 && life2=15
               ;;
              3) life=7 && life2=7
              ;;
              4) life=1
              esac
              oneplayer
              }
              


              Les modifications que j'ai dû faire sont:
              - remplacer dans le menu la fonction "oneplayer" par "difficulty_mode"
              - remplacer dans le début de "oneplayer" if [ [ $life = 15 ]] par if [ [ $life = $life2 ]]
              - la déclaration des variables en tout début de script $life et $life2 étant devenu inutile, je les ai effacées.
              -dans la fonction "playagain", remplacer "sh hangman.final" par one player ce qui en théorie devrait permettre de rejouer sans devoir repasser par le menu, à y rajouter éventuellement le moyen de retourner vers le menu, pour permettre de passer au mode 2 joueurs. et inversement.
              Je rajouterais les couleurs demain et le posterais.

              Bonne nuitée :))
              1. Modérateur
                Pour revenir sur le "&&", c'est une condition qui s'applique si la commande précédente a renvoyé un code retour vrai (0). Dans ton cas, la déclaration d'une variable ne conditionne pas de code retour, du moins elle ne renvoie pas d'erreur, donc ici elle ne sert à rien, d'où l'emploi dans le case d'un retour à la ligne ou si tu veux tu peux aussi l'écrire :

                life=26; life2=26

                ;-))
                1. Ok merci pour la petite explication, en fait là je l'utilise surtout pour gagner 1 lignes ( 3 en tout... )

                  Donc si j'ai bien compris la syntaxe c'est 1) life=26; life2=26
                  ;;
                  2) etc...
                  1. Modérateur
                    Oui, mais tu peux aussi mettre les ";;" en bout de ligne :
                    1) life=26; life2=26;;
                    2) etc...
                    ;-))
                    1. Merci :)))
                      Je vais encore en gagner quelque-unes comme ça, là il fait 230 lignes...
                      pour la couleur juste une petit question sur la syntaxe, est-ce que l'on peut faire
                      ${vert} echo blablabla
                      echo albalbalb
                      echo lbalbalba ${resetcolor} 
                      


                      ou encore
                        ${vert}echo "will you find the word ${resetcolor} ${rouge} $name ${resetcolor}" 


                      Sinon y a-t-il d'autres couleur que celles proposer dans ton script en première page?
                      1. Modérateur
                        Oui pour les deux ;-))

                        Sinon pour les couleurs tu as le choix, soit avec des codes "ANSI" soit avec "tput".
                        Tiens voilà en avant-première un extrait d'une astuce qu'il faut que je me décide à finir pour la FAQ concernant la personnalisation de son ".bashrc" :
                        Séquence d'échappement ANSI
                        
                        \e	Échappement (\033 ASCII)
                        [n      Activation d'un attribut (n étant une valeur, 1 active la valeur gras et 0 la désactive)
                        m       Termine la séquence d'échappement
                        
                        \e[0m    Désactivation
                        \e[1m    Attribut gras
                        \e[3m    Attribut italique
                        \e[4m    Attribut soulignement
                        \e[5m    Attribut clignotement
                        \e[6m    Attribut contour noir (nécessite un arrière-plan coloré pour être perceptible)
                        \e[7m    Attribut vidéo inverse
                        \e[8m    Attribut invisible (nécessite un arrière-plan coloré)
                        \e[9m    Attribut barré
                        \e[22m   Attribut désactive gras
                        \e[23m   Attribut désactive italique
                        \e[24m   Attribut désactive soulignement
                        \e[25m   Attribut désactive clignotement
                        \e[27m   Attribut désactive vidéo inverse
                        \e[29m   Attribut désactive barré


                        Couleurs

                        Code ANSI

                        Note : Les codes couleurs ci-dessous sont préfixés avec la séquence d'échappement (\e[)

                        Texte

                        noir='\e[0;30m'
                        gris='\e[1;30m'
                        rougefonce='\e[0;31m'
                        rose='\e[1;31m'
                        vertfonce='\e[0;32m'
                        vertclair='\e[1;32m'
                        orange='\e[0;33m'
                        jaune='e[1;33m'
                        bleufonce='\e[0;34m'
                        bleuclair='\e[1;34m'
                        violetfonce='\e[0;35m'
                        violetclair='\e[1;35m'
                        cyanfonce='\e[0;36m'
                        cyanclair='\e[1;36m'
                        grisclair='\e[0;37m'
                        blanc='\e[1;37m'
                        
                        neutre='\e[0;m'

                        Arrière-plan

                        APnoir='\e[0;40m]'
                        AProuge='\e[0;41m'
                        APvert='\e[0;42m'
                        APmarron='\e[0;43m'
                        APbleu='\e[0;44m'
                        APviolet='\e[0;45m'
                        APcyan='\e[0;46m'
                        APgris='\e[0;47m'

                        Commande tput
                        Black="$(tput setaf 0)"				# Noir
                        BlackBG="$(tput setab 0)"			# Arrière-plan noir
                        DarkGrey="$(tput bold ; tput setaf 0)"		# Gris foncé
                        LightGrey="$(tput setaf 7)"			# Gris clair
                        LightGreyBG="$(tput setab 7)"			# Arrière-plan gris clair
                        White="$(tput bold ; tput setaf 7)"		# Blanc
                        Red="$(tput setaf 1)"				# Rouge foncé
                        RedBG="$(tput setab 1)"				# Arrière-plan rouge foncé
                        LightRed="$(tput bold ; tput setaf 1)"		# Rouge clair
                        Green="$(tput setaf 2)"				# Vert foncé
                        GreenBG="$(tput setab 2)"			# Arrière-plan vert foncé
                        LightGreen="$(tput bold ; tput setaf 2)"	# Vert clair
                        Brown="$(tput setaf 3)"				# Marron
                        BrownBG="$(tput setab 3)"			# Arrière-plan marron
                        Yellow="$(tput bold ; tput setaf 3)"		# Jaune
                        Blue="$(tput setaf 4)"				# Bleu foncé
                        BlueBG="$(tput setab 4)"			# Arrière-plan bleu foncé
                        LightBlue="$(tput bold ; tput setaf 4)"		# Bleu clair
                        Purple="$(tput setaf 5)"			# Pourpre
                        PurpleBG="$(tput setab 5)"			# Arrière-plan pourpre
                        Pink="$(tput bold ; tput setaf 5)"		# Rose
                        Cyan="$(tput setaf 6)"				# Cyan foncé
                        CyanBG="$(tput setab 6)"			# Arrière-plan cyan foncé
                        LightCyan="$(tput bold ; tput setaf 6)"		# Cyan clair
                        
                        NC="$(tput sgr0)" 				# Retour à la normale
                        1. Et bin je te remercie, en plus de ça j'ai droit a une avant premiere :)
                          Je m'amuserais demain avec tout ça, je vais nous faire un vrai hangman de carnaval!!!!! :)))))

                          juste pour être sure de la syntaxe en ANSI, ceci est correct?
                            \e[3m  bla bla bla \e[23m 
                          1. Modérateur
                            Normalement oui, avec "echo -e" devant, mais apparemment l'italique ne passe pas ;-((
                            1. OK, pour l'italique c'est pas bien grave c'était juste un exemple :)))))
                              C'est plus les couleurs qui m'intéresse, pour la visibilité et un peu le clignotement pour les messages d'erreurs et de fin.

                              Encore merci et re-bonne nuitée. :)
                              1. Ok bin voilà la bête dans sa version final! 234 lignes, si quelqu'un peux me le faire plus court avec des explications, fait moi signe!

                                #!/bin/bash
                                clear
                                function playagain()
                                {
                                echo "DO YOU WANT TO PLAY AGAIN ( insert y or n )"
                                echo "IF YOU WANT TO GO BACK TO THE MENU PLEASE INSERT 'menu'"
                                read ans
                                clear
                                 if [ [ $ans = 'menu' || $ans = menu ]]
                                  then sh hangman
                                 elif [ [ $ans = y* || $ans = Y* ]]
                                  then difficulty_mode
                                  else echo GOOD BYE
                                 fi
                                exit
                                }
                                function oneplayer()
                                {
                                hazard=$(echo $((($RANDOM%15)+1)))
                                word=$(cat words | head -$hazard | tail -1)
                                if [ [ $life = $life2 ]]
                                 then until [ [ $life = 0 ]]
                                  do
                                    echo "YOU HAVE $life LIVES LEFT"
                                    echo "YOU TRYED THESE LETTER(s) : $letterguessed"
                                    echo ${word//[^$checkletter]/-}
                                    echo "WILL YOU FIND THE WORD $name1?"
                                    echo "TRY A LETTER :"
                                    read letter
                                    Nletter=$(echo -n $letter | wc -c)
                                    maxletter=$(echo -n $word | wc -c)
                                    clear
                                     if [ [ $letter = "" ]]
                                      then echo "PLEASE $name1, INSERT A LETTER BEFORE PRESS ENTER. PAY ATTENTION"
                                           continue
                                     elif [ [ $Nletter -gt 1 && $Nletter -lt $maxletter ]]
                                      then echo "PLEASE $name1, INSERT ONLY ONE LETTER"
                                           continue
                                     elif [ [ $Nletter = $maxletter && $letter = $word ]]
                                      then echo "CONGRATULATION $name1," && if [ [  $twoplayers_mode = 1 ]]
                                                                              then echo "$name2 HAVE BEEN HANGED"
                                                                              fi
                                           echo "THE HIDDEN WORD WAS: $word" && if [ [  $twoplayers_mode = 1 ]]
                                                                               then echo "$name2's  WORD : $word2"
                                                                               fi
                                           playagain
                                     elif [ [ $Nletter = $maxletter || $Nletter -gt $maxletter && $letter != $word ]]
                                      then echo "YOU'VE BEEN HANGED $name1, " && if [ [  $twoplayers_mode = 1 ]]
                                                                               then echo "$name2 IS RUNNING AWAY"
                                                                                fi
                                           echo "THE HIDDEN WORD WAS: $word" && if [ [  $twoplayers_mode = 1 ]]
                                                                               then echo "$name2's WORD WAS: $word2"
                                                                               fi
                                           playagain
                                     fi
                                    echo $letterguessed | grep $letter > /dev/null
                                    return=$?
                                     if [ [ $return -eq 0 ]]
                                      then echo "LETTER ALREADY CHOOSEN $name1, AS I'M NICE I DON'T TAKE YOU A LIFE"
                                      continue
                                     fi
                                    letterguessed=$letterguessed$letter,
                                    echo $word | grep $letter > /dev/null
                                    retval=$?
                                     case $retval in
                                       0) clear
                                          checkletter=$checkletter$letter
                                          echo GOOD LETTER
                                            if [ [ ${word//[^$checkletter]/-} = $word ]]
                                             then clear
                                                echo "$name1, YOU WIN!" && if [ [  $twoplayers_mode = 1 ]]
                                                                                then echo "$name2 HAVE BEEN HANGED"
                                                                                fi
                                                echo "THE HIDDEN WORD WAS: $word" && if [ [  $twoplayers_mode = 1 ]]
                                                                                then echo "$name2's WORD WAS: $word2"
                                                                                fi
                                                break
                                             else continue
                                            fi
                                          ;;
                                       1) clear
                                          life=$(($life -1))
                                          checkletter=$checkletter$letter
                                          echo "WRONG LETTER $name1 YOU HAVE LOST 1 LIFE!"
                                             if [ [  $twoplayers_mode = 1 ]]
                                              then until [ [ $life2 = 0 ]]
                                                     do
                                                  echo "$name2 THIS IS YOUR TURN"
                                                  echo "YOU HAVE $life2 LIVES LEFT"
                                                  echo "YOU TRYED THESE LETTER(S) : $letterguessed2"
                                                  echo ${word2//[^$checkletter2]/-}
                                                  echo "WILL YOU FIND THE HIDDEN WORD $name2?"
                                                  echo "TRY A LETTER :"
                                                  read letter2
                                                  Nletter2=$(echo -n $letter2 | wc -c)
                                                  maxletter2=$(echo -n $word2 | wc -c)
                                                  clear
                                                   if [ [ $letter2 = "" ]]
                                                    then echo "PLEASE, $name2, INSERT A LETTER BEFORE PRESS ENTER. PAY ATTENTION"
                                                         continue
                                                   elif [ [ $Nletter2 -gt 1 && $Nletter2 -lt $maxletter2 ]]
                                                    then echo "PLEASE $name2, INSERT ONLY ONE LETTER"
                                                    continue
                                                   elif [ [ $Nletter2 = $maxletter2 && $letter2 = $word2 ]]
                                                    then echo "CONGRATULATION $name2, YOU'VE FOUND THE HIDDEN WORD"
                                                         echo "$name1 HAVE BEEN HANGED"
                                                         echo "YOUR HIDDEN WORD WAS: $word2"
                                                         echo "THE $name1's HIDDEN WORD WAS: $word"
                                                    playagain
                                                   elif [ [ $Nletter2 = $maxletter2 || $Nletter2 -gt $maxletter2 && $letter2 != $word2 ]]
                                                    then echo "YOU'VE BEEN HANGED $name2"
                                                         echo "$name1 IS RUNNING AWAY"
                                                         echo "YOUR HIDDEN WORD WAS: $word2"
                                                         echo "THE $name1's HIDDEN WORD WAS: $word"
                                                    playagain
                                                   fi
                                                  echo $letterguessed2 | grep $letter2 > /dev/null
                                                  return=$?
                                                   if [ [ $return -eq 0 ]]
                                                     then echo "LETTER ALREADY CHOOSEN $name2, AS I'M NICE I DON'T TAKE YOU A LIFE"
                                                     continue
                                                   fi
                                                  letterguessed2=$letterguessed2$letter2,
                                                  echo $word2 | grep $letter2 > /dev/null
                                                   retval=$?
                                                   case $retval in
                                                     0) clear
                                                        checkletter2=$checkletter2$letter2
                                                        echo GOOD LETTER
                                                        if [ [ ${word2//[^$checkletter2]/-} = $word2 ]]
                                                          then clear
                                                             echo "CONGRATULATION $name2, YOU WIN! $name1 HAVE BEEN HANGED"
                                                             echo "THE HIDDEN WORD WAS: $word2"
                                                             echo "THE $name1's HIDDEN WORD WAS: $word"
                                                             playagain
                                                             break
                                                          else continue
                                                         fi
                                                       ;;
                                                    1) clear
                                                       life2=$(($life2 -1))
                                                       checkletter2=$checkletter2$letter2
                                                       echo "WRONG LETTER YOU HAVE LOST 1 life! $name1 THIS IS YOUR TURN"
                                                       break
                                                         if [ [ $life2 = 0 ]]
                                                          then clear
                                                             echo "YOU ARE A LOOSER $name2, YOU'VE BEEN HANGED AND $name1 IS RUNNING AWAY"
                                                             echo "THE HIDDEN WORD WAS: $word2"
                                                             echo "THE $name1's HIDDEN WORD WAS: $word"
                                                             playagain
                                                             break
                                                          else continue
                                                         fi
                                                       ;;
                                                   esac
                                                  done
                                                fi
                                          if [ [ $life = 0 ]]
                                           then clear
                                              echo "YOU ARE A LOOSER $name1, YOU'VE BEEN HANGED" && if [ [  $twoplayers_mode = 1 ]]
                                                                                                                                                     then echo "AND $name2 IS RUNNING AWAY"
                                                                                                                                                    fi
                                              echo "THE HIDDEN WORD WAS: $word" && if [ [  $twoplayers_mode = 1 ]]
                                                                                                                      then echo "THE $name2's HIDDEN WORD WAS: $word2"
                                                                                                                     fi
                                              break
                                           else continue
                                          fi
                                          ;;
                                    esac
                                  done
                                fi
                                playagain
                                }
                                function difficulty_mode()
                                {
                                checkletter="-"
                                letterguessed=""
                                checkletter2="-"
                                letterguessed2=""
                                if [ [  $twoplayers_mode = 1 ]]
                                 then echo "PLEASE $name1, CHOOSE A WORD FOR PLAYER2'S GAME"
                                      read word2
                                fi
                                echo "PLEASE SELECT A DIFFICULTY BEFORE PLAYING, IT COULD SAVE YOUR LIVE or not... :)"
                                echo INSERT 1 FOR EASY MODE
                                echo INSERT 2 FOR NORMAL MODE
                                echo INSERT 3 FOR HARD MODE
                                echo INSERT 4 FOR KAMIKAZE MODE
                                read dif
                                case $dif in
                                1) life=26; life2=26
                                 ;;
                                2) life=15; life2=15
                                 ;;
                                3) life=7; life2=7
                                 ;;
                                4) life=1
                                esac
                                clear
                                oneplayer
                                }
                                cat<<menu
                                ######**HANGMAN///////Jeu du Pendu**######
                                1) 1player
                                2) 2players
                                3) exit
                                Please enter your selection (1 to 3)
                                menu
                                read input
                                clear
                                case $input in
                                1) echo "HELLO $USER, PLEASE ENTER YOUR NICKNAME:"
                                   read name1
                                   echo "WELCOME $name1, UNIX WILL BE YOUR JUDGE, YOU HAVE THE RIGHT TO CHOOSE A DIFFUCLTY, press enter"
                                   read ans
                                   clear
                                   if [ [ $ans = * ]]
                                   then difficulty_mode
                                   fi
                                 ;;
                                2) echo "HELLO $USER, PLEASE ENTER YOUR NICKNAME:"
                                   read name1
                                   clear
                                   echo "HELLO PLAYER2, PLEASE ENTER YOUR NICKNAME:"
                                   read name2
                                   clear
                                   twoplayers_mode=1
                                   difficulty_mode
                                 ;;
                                3) exit
                                 ;;
                                *) sh hangman
                                esac
                                


                                La version "carnaval" arriveras incéssament sous peu....... en attendant amusez-vous bien. :)))))
                                Pour tout problème(s) concernant l'exécution du ce script et/ou autres renseignements, n'hésitez pas a me contacter!

                                p.s.: j'ai dit petit soucis avec les lignes un peu trop grandes donc désolé pour les problèmes de lisibilités éventuelles
                                1. Salut tout le monde!

                                  je refais surface ....

                                  Hug, peux-tu envoyer le texte de pendu, comme problème, pour que je juge ce qui était demandé !

                                  Merci d'avance

                                  M
                                  1. Salut,

                                    alors voilà l'énoncé, je le met en anglais, pas fort envie de me taper la traduc :)))))))))))))))

                                    Summary

                                    The object this exercice is for you to write a script that emulates the classic game hangman. The object of this game is for a user to try and guess a word which has been generated by the program or entered by someelse. The user will generally have a certain amount of lives and is then requested to try and guessed a letter in the word. On successful guesses the letter is shown within the word in its relevant position. An unsuccessful guess leads to a loss of a life. A record of guessed letters must be kept.

                                    Specification

                                    1) The program must allow for one or thw player game. If a one player game is selected, the word is randomly generated from a list of stored words. If a two player game is selected, one player should be prompted to enter a word.

                                    2) The guessed letters must be visible to the player.

                                    3) the current lives must be visible

                                    4) the number of guesses must be visible.

                                    5) when the number of lives has run out or the word is guessed a message should be displayed to the user stating how they have done
                                    EXAMPLE

                                    Sorry the word was " THE-SECRET-WORD3

                                    OR

                                    well donne the word was "THE_SECRET_WORD" you guessed it in 15 attempts with the loss of 2 lives.

                                    Et voilà :)))

                                    Comme je t'ai dit dans le mp, il m'a demandé de le diviser en plusieurs function plus petites, je pensais y arriver hier mais j'ai mon menu qui c'est mis a merder, il ne s'affiche même pas et il me dit qu'il y a une erreur la derniere ligne+1, c'est à dire par exemple que mon script fait 20 lignes il me met l'erreur à la ligne 21 et me dit unexpected end of files! si les experts peuvent m'aider..... merci d'avance.
                                    Du coup je suis entrain de le réécrire entièrement, à noter que l'utilisation des function va me faire gagner pas mal de lignes et me donner la possibilité d'ajouter plusieurs joueur sans trop de soucis.

                                    N'hésite pas a me contacter si il y a des trucs que tu comprends pas dans le script!
                                    1. Trouvé l'erreur du menu, j'avais oublié de fermer une fonction avec un } , du coup il aimait trop........
                                  2. BESOIN D'AIDE!!!!!!

                                    Bon là je décroche... donc je suis entrain de réécrire le script mais en le divisant en plusieurs fonctions, jusque là pas trop de soucis mais j'ai un problème, lorsque le script passe de la fonction "difficulty" a "wordchecking" la variable "$life" n'est pas prise en compte et lorsque j'en fait l'echo rien ne s'affiche, juste le bla bla mais sans la valeur de la variable alors que la variable $checkletter elle est prise en compte, pourquoi?

                                    #!/bin/bash
                                    function wordchecking ()
                                    {
                                    if [ [ $life = $life2 ]]
                                    then echo "You have $life lives left"
                                            echo $checkletter
                                    fi
                                    }
                                    function  difficulty ()
                                    {
                                    checkletter="-"
                                    letterguessed=""
                                    checkletter2="-"
                                    letterguessed2=""
                                    echo hello please select a difficulty
                                    echo insert 1 for easy mode
                                    echo insert 2 for normal mode
                                    echo insert 3 for hard mode
                                    echo insert 4 for kamikaze mode
                                    read difficulty_mode
                                    case difficulty_mode in
                                    1) life=26; life2=26 ;;
                                    2) life=15; life2=15 ;;
                                    3) life=7; life2=7 ;;
                                    4) life=1: lfe2=1
                                    esac
                                    clear
                                    wordchecking
                                    }
                                    cat<<choix
                                    1) Play against computer
                                    2) Play against another player
                                    3) EXIT
                                    Please enter your selection (1 to 3)
                                    choix
                                    read input
                                    clear
                                    case $input in
                                    1) echo "Hello $USER what's your nickname?"
                                       read name1
                                       echo "WELCOME $name1, UNIX WILL BE YOUR JUDGE, YOU HAVE THE RIGHT TO CHOOSE A DIFFUCLTY, press enter"
                                       read ans
                                       clear
                                       if [ [ $ans = * ]]
                                       then difficulty
                                       fi ;;
                                    2) echo in progress, come back soon ;;
                                    3) exit ;;
                                    esac
                                    
                                    
                                    1. Bon bin je vais m'auto-répondre, apparemment il n'aime pas trop les "case" dans les fonctions du coup j'ai essayé avec des if et ça à marché!

                                      function  difficulty ()
                                      {
                                      checkletter="-"
                                      letterguessed=""
                                      checkletter2="-"
                                      letterguessed2=""
                                      echo hello please select a difficulty
                                      echo insert 1 for easy mode
                                      echo insert 2 for normal mode
                                      echo insert 3 for hard mode
                                      echo insert 4 for kamikaze mode
                                      read difmode
                                      if [ [ $difmode = 1 ]]; then life=26 ; life2=26 ;
                                      elif [ [ $difmode = 2 ]]; then life=15 ; life2=15 ;
                                      elif [ [ $difmode = 3 ]]; then life=7 ; life2=7 ;
                                      elif [ [ $difmode = 4 ]]; then life=1 ; life2=1 ;
                                      fi
                                      clear
                                      }


                                      il ne me reste plus que à faire la partie du deuxième joueur et le script gagneras dans les alentours de 80 lignes...... si je compte bien :)))
                                  3. Modérateur
                                    Ben pour le case, peut être qu'en payant avec 1$ en plus ça marcherait mieux, non :
                                    read difficulty_mode
                                    case $difficulty_mode in
                                    1) life=26; life2=26 ;;
                                    2) life=15; life2=15 ;;
                                    3) life=7; life2=7 ;;
                                    4) life=1: lfe2=1
                                    esac
                                    ;-))
                                    1. ok merci........ encore une erreur de syntaxe, il serait que j'ouvre les yeux un peu plus grand, je l'ai relu au moins 20 foi mais c'est pas grave :))))
                                      la partie deuxième joeuur me broute un peu, elle sera surement fini demain ou au pire après demain, je la posterais ici.

                                      encore merci :)))
                                  4. Voilà la version "light", j'ai pas mal galéré avec la partie du deuxième joueur mais finalement je l'ai eu a l'usure.....
                                    L'utilisation de function ma fait gagné 90 lignes!!!!

                                    #!/bin/bash
                                    clear
                                    function playagain ()
                                    {
                                    echo "do you want to play again? (enter y or n)"
                                    read ans
                                    clear
                                    if [ [ $ans = y* || $ans = Y* ]];then sh esai;else echo GOOD BYE
                                    fi
                                    exit
                                    }
                                    function lastchecking ()
                                    {
                                    echo $3 | grep $letter > /dev/null
                                    retval=$?
                                    case $retval in
                                    0) clear
                                    echo GOOD LETTER
                                    if [ [ ${3//[^$1]/_} = $3 ]];then clear;echo "CONGRATULATION $2, YOU WIN!"
                                    echo "THE HIDDEN WORD WAS: $2"
                                    playagain
                                    else continue
                                    fi
                                    ;;
                                    1) clear
                                    life=$(($4 -1))
                                    echo "WRONG LETTER $2 YOU HAVE LOST 1 LIFE!"
                                    if [ [ $life = 0 ]]
                                    then clear;echo "YOU ARE A LOOSER $3, YOU'VE BEEN HANGED"
                                    echo "the hidden word was: $1"
                                    playagain
                                    fi
                                    esac
                                    }
                                    function firstchecking ()
                                    {
                                    clear
                                    Nletter=$(echo -n $letter | wc -c)
                                    maxletter=$(echo -n $2 | wc -c)
                                    if [ [ $letter = "" ]]
                                    then echo "PLEASE $1, INSERT A LETTER BEFORE PRESS ENTER. PAY ATTENTION";continue
                                    elif [ [ $Nletter -gt 1 && $Nletter -lt $maxletter ]]
                                    then echo "PLEASE $1, INSERT ONLY ONE LETTER";continue
                                    elif [ [ $Nletter = $maxletter && $letter = $2 ]]
                                    then echo "CONGRATULATION $1, YOU'VE FOUND THE HIDDEN WORD"
                                    echo "the hidden word was: $2";playagain
                                    elif [ [ $Nletter = $maxletter && $letter != $2 ]]
                                    then echo "YOU'VE BEEN HANGED $1, WHY NOT WAIT UNTIL YOU FIND MORE LETTERS?"
                                    echo "the hidden word was: $2"
                                    playagain
                                    elif [ [ $Nletter -gt $maxletter ]]
                                    then error=$(($error +1))
                                    echo "YOU HAVE ENTERED TOO MUCH CHARACTERS $1, NEXT TIME YOU ARE DEAD!!!"
                                    if [ [ $error = 2 ]];then echo "YOU'VE BEEN HANGED $1, YOU HAVE BEEN WARN"
                                    playagain;fi
                                    continue
                                    fi
                                    echo $3 | grep $letter > /dev/null
                                    return=$?
                                    if [ [ $return -eq 0 ]];then echo "LETTER ALREADY CHOOSEN $1, AS I'M NICE I DON'T TAKE YOU A LIFE" ;continue
                                    fi
                                    }
                                    function wordchecking ()
                                    {
                                    echo "you have $1 lives left"
                                    echo "You tryed this letter(s) $3"
                                    echo ${4//[^$2]/-}
                                    echo "will you find the word $5?"
                                    echo "try a letter :"
                                    read letter
                                    }
                                    function  difficulty ()
                                    {
                                    checkletter1="-"
                                    letterguessed1="-->>"
                                    checkletter2="-"
                                    letterguessed2="-->>"
                                    echo hello please select a difficulty
                                    echo insert 1 for easy mode
                                    echo insert 2 for normal mode
                                    echo insert 3 for hard mode
                                    echo insert 4 for kamikaze mode
                                    read dif
                                    case $dif in
                                    1) life1=26; life2=26 ;;
                                    2) life1=15; life2=15 ;;
                                    3) life1=7; life2=7 ;;
                                    4) life1=1; life2=1
                                    esac
                                    clear
                                    }
                                    cat<<choix
                                    1) Play against computer
                                    2) Play against another player
                                    3) EXIT
                                    Please enter your selection (1 to 3)
                                    choix
                                    read input
                                    clear
                                    case $input in
                                    1) error=0
                                    echo "Hello $USER what's your nickname?"
                                    read name1
                                    echo "WELCOME $name1, UNIX WILL BE YOUR JUDGE, YOU HAVE THE RIGHT TO CHOOSE A DIFFUCLTY, press enter"
                                    read ans
                                    clear
                                    if [ [ $ans = * ]]
                                    then difficulty
                                    hazard=$(echo $((($RANDOM%15)+1)));word1=$(cat words | head -$hazard | tail -1)
                                    while [ [ $life != 0 ]]
                                    do wordchecking $life1 $checkletter1 $letterguessed1 $word1 $name1
                                    firstchecking $name1 $word1 $letterguessed1
                                    checkletter1=$checkletter1$letter
                                    letterguessed1=$letterguessed1$letter,
                                    lastchecking $checkletter1 $name1 $word1 $life1
                                    life1=$life
                                    continue
                                    done
                                    fi ;;
                                    2) twoplayersmode=0
                                    echo "Hello $USER, please enter a name:"
                                    read name1
                                    echo "$name1 choose a word for player 2"
                                    read word2
                                    clear
                                    echo "player2 please enter your name:"
                                    read name2
                                    clear
                                    difficulty
                                    hazard=$(echo $((($RANDOM%15)+1)));word1=$(cat words | head -$hazard | tail -1)
                                    while [ [ $twoplayersmode = 0 ]]
                                    do wordchecking $life1 $checkletter1 $letterguessed1 $word1 $name1
                                    firstchecking $name1 $word1 $letterguessed1
                                    letterguessed1=$letterguessed1$letter,
                                    checkletter1=$checkletter1$letter
                                    lastchecking $checkletter1 $name1 $word1 $life1
                                    life1=$life
                                    while [ [ $twoplayersmode = 0 ]]
                                    do wordchecking $life2 $checkletter2 $letterguessed2 $word2 $name2
                                    firstchecking $name2 $word2 $letterguessed2
                                    letterguessed2=$letterguessed2$letter,
                                    checkletter2=$checkletter2$letter
                                    lastchecking $checkletter2 $name2 $word2 $life2
                                    life2=$life
                                    break
                                    done
                                    done;;
                                    3) exit ;;
                                    esac


                                    Le combat fut dur mais j'en suis sortit vainqueur :))))))
                                    Précédent
                                    • 1
                                    • 2