Script bash avancé - Page 2

Précédent
  • 1
  • 2
  1. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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.
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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 ;-)
    0
  3. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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+
    0
  4. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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 :))))))))))))))
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    ;-))
    0
  7. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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 :))
    0
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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

    ;-))
    0
  9. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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...
    0
  10. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Oui, mais tu peux aussi mettre les ";;" en bout de ligne :
    1) life=26; life2=26;;
    2) etc...
    ;-))
    0
  11. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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?
    0
  12. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    0
  13. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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 
    0
  14. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Normalement oui, avec "echo -e" devant, mais apparemment l'italique ne passe pas ;-((
    0
  15. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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. :)
    0
  16. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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
    0
  17. makoko Messages postés 54 Statut Membre
     
    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
    0
  18. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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!
    0
    1. hugnix
       
      Trouvé l'erreur du menu, j'avais oublié de fermer une fonction avec un } , du coup il aimait trop........
      0
  19. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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
    
    
    0
    1. hugnix Messages postés 129 Date d'inscription   Statut Membre
       
      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 :)))
      0
  20. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    ;-))
    0
    1. hugnix Messages postés 129 Date d'inscription   Statut Membre
       
      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 :)))
      0
  21. hugnix Messages postés 129 Date d'inscription   Statut Membre
     
    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 :))))))
    0
Précédent
  • 1
  • 2