Script bash avancé
Fermé
billy
-
29 oct. 2007 à 19:46
hugnix Messages postés 119 Date d'inscription samedi 9 juin 2007 Statut Membre Dernière intervention 27 avril 2009 - 20 févr. 2008 à 19:06
hugnix Messages postés 119 Date d'inscription samedi 9 juin 2007 Statut Membre Dernière intervention 27 avril 2009 - 20 févr. 2008 à 19:06
A voir également:
- Script bash choix multiple
- Script vidéo youtube - Guide
- Liste déroulante choix multiple excel - Guide
- Ecran multiple pc - Guide
- Windows presse papier multiple - Guide
- Bash list ✓ - Forum Shell
40 réponses
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
22 janv. 2008 à 22:00
22 janv. 2008 à 22:00
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.
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.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
22 janv. 2008 à 22:06
22 janv. 2008 à 22:06
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 ;-)
Une feuille de papier et un crayon. Pas mieux ;-DDD
Bonne chance pour la suite et @ quand tu veux ;-)
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
22 janv. 2008 à 22:15
22 janv. 2008 à 22:15
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+
Je traine souvent sur ccm maintenant, j'essaye d'aider les gens quand je le peux, on se recroiseras surement!
A+
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
23 janv. 2008 à 22:12
23 janv. 2008 à 22:12
J'ai un petit souci avec une fonction, celle pour choisir la difficulté.
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 :))))))))))))))
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 :))))))))))))))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
23 janv. 2008 à 22:19
23 janv. 2008 à 22:19
Salut,
Déjà :
Et en faisant avec un "case ... esac" plutôt, non ?
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;-))
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
23 janv. 2008 à 22:31
23 janv. 2008 à 22:31
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:
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 :))
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 :))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
23 janv. 2008 à 22:42
23 janv. 2008 à 22:42
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
;-))
life=26; life2=26
;-))
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
23 janv. 2008 à 22:58
23 janv. 2008 à 22:58
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...
Donc si j'ai bien compris la syntaxe c'est 1) life=26; life2=26
;;
2) etc...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
23 janv. 2008 à 23:01
23 janv. 2008 à 23:01
Oui, mais tu peux aussi mettre les ";;" en bout de ligne :
1) life=26; life2=26;; 2) etc...;-))
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
23 janv. 2008 à 23:18
23 janv. 2008 à 23:18
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
ou encore
Sinon y a-t-il d'autres couleur que celles proposer dans ton script en première page?
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?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
23 janv. 2008 à 23:30
23 janv. 2008 à 23:30
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" :
Couleurs
Code ANSI
Note : Les codes couleurs ci-dessous sont préfixés avec la séquence d'échappement (\e[)
Texte
Arrière-plan
Commande tput
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
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
23 janv. 2008 à 23:43
23 janv. 2008 à 23:43
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?
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
23 janv. 2008 à 23:59
23 janv. 2008 à 23:59
Normalement oui, avec "echo -e" devant, mais apparemment l'italique ne passe pas ;-((
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
24 janv. 2008 à 00:22
24 janv. 2008 à 00:22
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. :)
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. :)
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
25 janv. 2008 à 20:26
25 janv. 2008 à 20:26
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!
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
#!/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
makoko
Messages postés
53
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
25 novembre 2012
15 févr. 2008 à 22:46
15 févr. 2008 à 22:46
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
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
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
16 févr. 2008 à 17:27
16 févr. 2008 à 17:27
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!
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!
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
16 févr. 2008 à 18:18
16 févr. 2008 à 18:18
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?
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
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
17 févr. 2008 à 21:47
17 févr. 2008 à 21:47
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é!
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 :)))
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 :)))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
17 févr. 2008 à 21:58
17 févr. 2008 à 21:58
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;-))
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
17 févr. 2008 à 22:53
17 févr. 2008 à 22:53
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 :)))
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 :)))
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
20 févr. 2008 à 19:06
20 févr. 2008 à 19:06
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!!!!
Le combat fut dur mais j'en suis sortit vainqueur :))))))
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 :))))))