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
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
30 oct. 2007 à 11:34
30 oct. 2007 à 11:34
Salut,
Avant de te lancer dans la configuration multi-joueurs, peut être serait-il bien de commencer à élaborer ton script petit à petit en commençant par tester par exemple le tirage aléatoire d'un mot en t'aidant de ceci (l'utilisation d'un tableau est préférable dans ce cas) :
;-))
Avant de te lancer dans la configuration multi-joueurs, peut être serait-il bien de commencer à élaborer ton script petit à petit en commençant par tester par exemple le tirage aléatoire d'un mot en t'aidant de ceci (l'utilisation d'un tableau est préférable dans ce cas) :
# Tableau contenant la liste stored_word=(java delphi testing analyst unix linux windows) # Nombre d'éléments de la liste nbr=${#stored_word[*]} # Génération d'un nom au hasard word=${stored_word[$((RANDOM%nbr))]}Puis de trouver la commande qui affichera les lettres trouvées à la place des underscores, puis le compteur de vie, etc...
;-))
Bonjour, voilà je comence donc par faire le code pour un joueur.
A ce niveau du script, les problèmes que je rencontre sont:
- au niveau du compteur de vie
-les caractères cachés sont bien affichés mais il y en a 1 en trop
-comment intégrer un contrôle pour vérifier que la lettre saisie ne l'a pas déjà été
-comment arranger mon code, en utilisant au maximum des fonctions (si vous pouvez me donner quelques conseils pour l'optimisation)
#!/bin/bash set -xv
clear
###################function hide_word#################
function hide_word () {
hidden_word=$(echo $solution|tr "[a-z-A-Z]" ".")
}
#####################case one player###################
function one_player () {
#array of words :
Stored_words="delphi java testing analyst unix linux windows php pascal"
word=($Stored_words)
#number of word in array:
nb_words=${#word[*]}
#the word is randomly generated and it is hidden:
solution=${word[$((RANDOM%nb_words))]}
#hidden_word=$(echo $solution|tr "[a-z-A-Z]" ".")
hide_word
#number of life is equal of number of letter in word:
nb_letters=$(echo $solution |wc -c|cut -f1)
echo "you've got" $(($nb_letters-1)) "life :"
# display the hidden word
echo $hidden_word
# insert each characters of solution in an array of char
mot=($solution)
for char in $mot
do
mot_find[$i]=$char
done
#don't forget to delete these lines
echo "solution:"$mot_find
#while loop => if not find a good letter, enter a letter
nb_life=$(($nb_letters-1))
i=1
while [ $i -le $nb_life ]
do
echo -e "enter a letter:\n";read letter
#if "$letter" in "$letters"
#then
#echo "choose another character:"
#read letter
#fi
letters="$letters$letter"
echo "used characters :"$letters
# used_char[$i]="$letter" #this array to conserve used characters
# echo $used_char
#display good charaters in hidden_word
# good=$(echo $mot_find|tr -c "$letter" ".")
# echo ${mot_find[@]///}
good=$mot_find
good=$(echo $good|tr -c "$letters" ".")
#echo $x $good
echo $good
let i=1+$i
done
echo "the right word is:$solution"
}
#######################################################
################menu: select one or two player#########
cat<<menu
*************MENU**************
********1) one player**********
********2) two players*********
********3) quit****************
enter your selection (1,2 or 3)
menu
read nbplayers
case $nbplayers in
"1") one_player;;
"2") two_players;;
"3") echo "GOOD BYE";;
esac
merci encore.
A ce niveau du script, les problèmes que je rencontre sont:
- au niveau du compteur de vie
-les caractères cachés sont bien affichés mais il y en a 1 en trop
-comment intégrer un contrôle pour vérifier que la lettre saisie ne l'a pas déjà été
-comment arranger mon code, en utilisant au maximum des fonctions (si vous pouvez me donner quelques conseils pour l'optimisation)
#!/bin/bash set -xv
clear
###################function hide_word#################
function hide_word () {
hidden_word=$(echo $solution|tr "[a-z-A-Z]" ".")
}
#####################case one player###################
function one_player () {
#array of words :
Stored_words="delphi java testing analyst unix linux windows php pascal"
word=($Stored_words)
#number of word in array:
nb_words=${#word[*]}
#the word is randomly generated and it is hidden:
solution=${word[$((RANDOM%nb_words))]}
#hidden_word=$(echo $solution|tr "[a-z-A-Z]" ".")
hide_word
#number of life is equal of number of letter in word:
nb_letters=$(echo $solution |wc -c|cut -f1)
echo "you've got" $(($nb_letters-1)) "life :"
# display the hidden word
echo $hidden_word
# insert each characters of solution in an array of char
mot=($solution)
for char in $mot
do
mot_find[$i]=$char
done
#don't forget to delete these lines
echo "solution:"$mot_find
#while loop => if not find a good letter, enter a letter
nb_life=$(($nb_letters-1))
i=1
while [ $i -le $nb_life ]
do
echo -e "enter a letter:\n";read letter
#if "$letter" in "$letters"
#then
#echo "choose another character:"
#read letter
#fi
letters="$letters$letter"
echo "used characters :"$letters
# used_char[$i]="$letter" #this array to conserve used characters
# echo $used_char
#display good charaters in hidden_word
# good=$(echo $mot_find|tr -c "$letter" ".")
# echo ${mot_find[@]///}
good=$mot_find
good=$(echo $good|tr -c "$letters" ".")
#echo $x $good
echo $good
let i=1+$i
done
echo "the right word is:$solution"
}
#######################################################
################menu: select one or two player#########
cat<<menu
*************MENU**************
********1) one player**********
********2) two players*********
********3) quit****************
enter your selection (1,2 or 3)
menu
read nbplayers
case $nbplayers in
"1") one_player;;
"2") two_players;;
"3") echo "GOOD BYE";;
esac
merci encore.
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
30 oct. 2007 à 20:18
30 oct. 2007 à 20:18
Tiens je te file ce que j'avais pondu hier soir, ça ne concerne qu'un seul joueur, j'ai pas de fonctions par contre, mais dans l'ensemble c'est assez proche de ton cheminement il me semble.
Bon ça ne gère pas directement les lettres déjà saisies, par contre ça influe sur le nombre de vies restante si elles sont fausses mais pas si elles sont bonnes ;-))
Voilà le code :
Bon ça ne gère pas directement les lettres déjà saisies, par contre ça influe sur le nombre de vies restante si elles sont fausses mais pas si elles sont bonnes ;-))
Voilà le code :
#! /bin/bash # Décommenter pour débugage #set -xv ### Initialisation des variables ### # Tableau contenant la liste stored_word=(java delphi testing analyst unix linux windows) # Nombre d'éléments de la liste nbr=${#stored_word[*]} # Génération d'un nom au hasard word=${stored_word[$((RANDOM%nbr))]} # Nombre de lettres du mot nbr_lettre=${#word} # Compteur count=0 # Compteur de vie vie=${#word} ### Décor ### # On efface le terminal clear # On plante le décor echo echo -e "Nombre de vie : ${vie}" echo -e "Lettres employées : ${lettre_usitee}" # On affiche le mot à trouver sous la forme "______" echo -e "Mot à trouver ($nbr_lettre lettres) : ${word//[a-z-A-Z-0-9]/_}" ### Début script ### # Boucle tant que toutes les lettres du mot n'ont pas été trouvées while [ "$count" -lt "$nbr_lettre" ] do echo -e "Entrer une lettre : \c" read lettre # Récupération des lettres déjà sélectionnées pour affichage ultérieur lettre_usitee=${lettre_usitee}${lettre} # On recherche la lettre sélectionnée grep -o "$lettre" <<< $word >/dev/null # On récupère le code retour retval=$? # Choix case $retval in 0) clear # code retour vrai # On récupère la liste des lettres exactes mot="${mot}${lettre}" echo # Affichage nombre de vie echo -e "Nombre de vie : ${vie}" # Affichage lettres sélectionnées echo -e "Lettres employées : ${lettre_usitee}" # On affiche à nouveau le mot à trouver sous la forme "______" #+ mais en affichant les lettres trouvées à leur emplacement echo "Mot à trouver : ${word//[^$mot]/_}" # On incréménte le compteur count=$((count + 1)) # On teste si toutes les lettres composant le mot mystère ont été trouvées if [ "${word//[^$mot]/_}" == "${word}" ] # Si c'est le cas on l'affiche then echo "Gagné" # Et on quitte la boucle break # Dans le cas contraire on redémarre une nouvelle boucle else continue fi ;; 1) clear # code retour faux # On récupère quand même la liste des lettres exactes mot="${mot}${lettre}" # On affiche un message echo "Mauvais choix" # On décrémente le compteur du nombre de vies vie=$((vie - 1)) # On affiche l'état echo -e "Nombre de vie : ${vie}" # Affichage lettres sélectionnées echo -e "Lettres employées : ${lettre_usitee}" # On affiche à nouveau le mot à trouver sous la forme "______" #+ en affichant toujours les lettres trouvées à leur emplacement echo "Mot à trouver : ${word//[^$mot]/_}" # On teste s'il reste des vies if [ "$vie" = 0 ] # Si plus de vies on affiche un message then echo "Perdu" # La réponse echo "Le mot à trouver était ${word}" # et on quitte la boucle break # Dans le cas contraire on redémarre une nouvelle boucle else continue fi ;; esac done
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
30 oct. 2007 à 20:36
30 oct. 2007 à 20:36
Voilà une version incluant "tput" afin de gérer l'adressage du curseur et les couleurs, donc à lancer sur un terminal ayant un fond sombre pour profiter de la coloration :
#! /bin/bash #set -xv #### Initialisation des variables tput #### #+ Mode normal ResetColor="$(tput sgr0)" # "Surligné" (bold) bold=$(tput smso) # "Non-Surligné" (offbold) offbold=$(tput rmso) # Couleurs (gras) #+ Rouge Red="$(tput bold ; tput setaf 1)" #+ Vert Green="$(tput bold ; tput setaf 2)" #+ Jaune Yellow="$(tput bold ; tput setaf 3)" #+ Bleue Blue="$(tput bold ; tput setaf 4)" #+ Cyan BlueCyan="$(tput bold ; tput setaf 6)" #### Fin initialisation variables tput #### #### Initialisation des variables du script #### # Tableau contenant la liste stored_word=(java delphi testing analyst unix linux windows) # Nombre d'éléments de la liste nbr=${#stored_word[*]} # Génération d'un nom au hasard word=${stored_word[$((RANDOM%nbr))]} # Nombre de lettres du mot nbr_lettre=${#word} # Compteur count=0 # Compteur de vie vie=${#word} #### Fin initialisation variables du script #### # Effacement du terminal clear # Adressage du curseur ligne 0 colonne 30 tput cup 0 30 #echo "${bold}${Yellow}Jeu du Pendu${ResetColor}${offbold}" echo "${Yellow}Jeu du Pendu${ResetColor}" # Adressage du curseur ligne 2 colonne 5 tput cup 2 5 echo -e "Mot à trouver (${nbr_lettre} lettres) : ${word//[a-z-A-Z-0-9]/_}" # Pré-affichage des champs tput cup 3 5 echo -e "Nombre de vie : ${Red}${vie}${ResetColor}" tput cup 4 5 echo -e "Lettres employées : ${BlueCyan}${lettre_usitee}${ResetColor}" while [ "$count" -lt "$nbr_lettre" ] do # Adressage du curseur ligne 6 colonne 5 tput cup 5 5 echo -e "Entrer une lettre : \c" read lettre lettre_usitee=${lettre_usitee}${lettre} grep -o "$lettre" <<< $word >/dev/null retval=$? case $retval in 0) # Effacement "Mauvais choix" tput cup 7 5 echo -e " " mot="${mot}${lettre}" # Adressage du curseur ligne 2 colonne 5 tput cup 2 5 echo "Mot à trouver (${nbr_lettre} lettres) : ${word//[^$mot]/_}" tput cup 4 5 echo -e "Lettres employées : ${BlueCyan}${lettre_usitee}${ResetColor}" count=$((count + 1)) tput cup 5 25 echo -e " " if [ "${word//[^$mot]/_}" == "${word}" ] then # Adressage du curseur ligne 8 colonne 30 tput cup 8 30 echo "${Green}Gagné${ResetColor}" break else continue fi ;; 1) tput cup 7 5 echo "${Yellow}Mauvais choix${ResetColor}" vie=$((vie - 1)) tput cup 3 5 echo -e "Nombre de vie : ${Red}${vie}${ResetColor}" tput cup 4 5 echo -e "Lettres employées : ${BlueCyan}${lettre_usitee}${ResetColor}" tput cup 5 25 echo -e " " if [ "$vie" = 0 ] then # Adressage du curseur ligne 8 colonne 30 tput cup 8 30 echo "${Red}Perdu${ResetColor}" # Adressage du curseur ligne 9 colonne 30 tput cup 9 20 echo "Le mot à trouver était ${BlueCyan}${word}${ResetColor}" break else continue fi ;; esac done;-))
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
30 oct. 2007 à 23:38
30 oct. 2007 à 23:38
On appelle ça une redirection. Tu dois connaitre la forme avec un fichier :
cat < fichierBen là c'est la forme "officielle" de faire une redirection directement depuis une variable (avec 3 chevrons). Il existe une autre forme pour faire une redirection directement depuis une commande :
while read file do echo $file done < <(find /chemin/ -name "*.txt" -print);-))
non je ne savais pas que 3 < permet de faire une redirection à partir d'une variable..c'est très pratique!
encore une question concernant cette ligne :
dans case 0)
echo "Hidden word (${nbr_lettre} letters) : ${word//[^$mot]/.}"
Est-ce que avec ${word//[^$mot]/.} :
paramètre :word
motif :[^$mot]
chaine :.
donc on recherche et remplace dans parametres les lettres qui ne correspondent pas à $mot par un "." ???
Pouvez-vous m'expliquer si ce n'est pas le cas? merci
encore une question concernant cette ligne :
dans case 0)
echo "Hidden word (${nbr_lettre} letters) : ${word//[^$mot]/.}"
Est-ce que avec ${word//[^$mot]/.} :
paramètre :word
motif :[^$mot]
chaine :.
donc on recherche et remplace dans parametres les lettres qui ne correspondent pas à $mot par un "." ???
Pouvez-vous m'expliquer si ce n'est pas le cas? merci
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
31 oct. 2007 à 06:38
31 oct. 2007 à 06:38
Rien d'autre à rajouter, si ce n'est de remplacer "paramètre" par "variable" et c'est tout bon ;-))
[tmpfs]$ variable="bonjour" [tmpfs]$ mot="roj" [tmpfs]$ echo ${variable//[^$mot]/_} _o_jo_r [tmpfs]$;-)
Voici une version 2 joueurs, le joueur1 doit doit insérer un mot à trouver pour le joueur2 .
!!!!!!! ATENTION MESSAGE AU NOUVEAU/FUTUR CCMISTES !!!!!!!!!!!!!!
Lors de l'utilisation de doubles crochets veuillez insérer un espace entre les "ouvrant" sinon, comme ce le fut pour ce script, les tests vont apparaitre en tant que liens!
exemple: if [ [ $1 = 2 ]]
merci.
Ça ira comme ça Jipicy?
Sinon d'un point de vue"professionnel" tu en penses quoi? ça fait pas longtemps que je me suis mis a la programmation ( 6 mois ) et je ne jamais fait d'informatique auparavant, a part installer des jeux........... donc je me demandais si j'étais sur la bonne voix!!? :)
J'ai commencé avec un peu de html pis unix et sql+ là j'attends le prochain test pour espérer passer la certif javasun a brighton!
Encore merci.
!!!!!!! ATENTION MESSAGE AU NOUVEAU/FUTUR CCMISTES !!!!!!!!!!!!!!
Lors de l'utilisation de doubles crochets veuillez insérer un espace entre les "ouvrant" sinon, comme ce le fut pour ce script, les tests vont apparaitre en tant que liens!
exemple: if [ [ $1 = 2 ]]
merci.
#!/bin/bash life=15 checkletter="-" letterguessed="" life2=15 checkletter2="-" letterguessed2="" function playagain() { echo "do you want to play again? (enter y or n)" read ans clear if [ [ $ans = y* || $ans = Y* ]] then sh hangman.final else echo GOOD BYE fi exit } function oneplayer () { hazard=$(echo $((($RANDOM%15)+1))) word=$(cat words | head -$hazard | tail -1) if [ [ $life = 15 ]] then until [ [ $life = 0 ]] do echo "you have $life live left" echo "You tryed this letter(s) : $letterguessed" echo ${word//[^$checkletter]/_} echo "will you find the word $name1?" echo "try a letter :" read letter clear 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 "CONGRATULATION $name, YOU WIN" echo "THE HIDDEN WORD WAS: $word" break else continue fi ;; 1) clear life=$(($life -1)) checkletter=$checkletter$letter echo WRONG LETTER YOU HAVE LOST 1 life if [ [ $twoplayers_mode = 1 ]] then clear until $life2 = 0 do echo "you have $life2 live left" echo "You tryed this letter(s) : $letterguessed2" echo ${word2//[^$checkletter2]/_} echo "will you find the word $name2?" echo "try a letter :" read letter2 clear 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 echo "THE HIDDEN WORD WAS: $word2" playagain break else continue fi ;; 1) clear life2=$(($life2 -1)) checkletter2=$checkletter2$letter2 echo WRONG LETTER YOU HAVE LOST 1 life break if [ [ $life2 = 0 ]] then clear echo YOU ARE A LOOSER $name2 echo "the hidden word was: $word2" playagain break else continue fi ;; esac done fi if [ [ $life = 0 ]] then clear echo YOU ARE A LOOSER $name echo "the hidden word was:" $word break else continue fi ;; esac done fi playagain } 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 a name:" read name echo "welcome $name, press ENTER for play against computer" read ans if [ [ $ans = * ]] then oneplayer fi ;; 2)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 twoplayers_mode=1 oneplayer ;; 3) exit ;; *) echo "WRONG SELECTION PLEASE ENTER A NUMBER FROM 1 TO 3" sh hangman.final esac
Ça ira comme ça Jipicy?
Sinon d'un point de vue"professionnel" tu en penses quoi? ça fait pas longtemps que je me suis mis a la programmation ( 6 mois ) et je ne jamais fait d'informatique auparavant, a part installer des jeux........... donc je me demandais si j'étais sur la bonne voix!!? :)
J'ai commencé avec un peu de html pis unix et sql+ là j'attends le prochain test pour espérer passer la certif javasun a brighton!
Encore merci.
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
15 janv. 2008 à 20:09
15 janv. 2008 à 20:09
Ça ira comme ça Jipicy?
Yes, à part que l'avertissement c'était plutôt dans l'autre sens, c'est à dire :
Pour une utilisation optimale de de ce script, veuillez bien faire attention à supprimer l'espace rajouté entre les crochets ouvrants des expressions de test... (espace rajouté pour faire face à la mise en page des balises internes au forum)
Mais bon c'est pas grave, si ça marche pas, ils viendront nous en faire part sur le forum ;-))
Sinon d'un point de vue"professionnel" tu en penses quoi ?
Professionnel c'est un bien grand mot, juste passionné tout au plus ;-)))
Bon honnêtement j'y ai jeté juste un œil comme ça dans les grandes lignes et j'ai pas eu le temps de le tester, mais bon je te fais confiance si tu dis que ça à l'air correct (à part quelques petites imperfections que tu dis...).
Sinon si c'est vrai que ça ne fait que 6 mois que tu t'es mis à l'informatique et à la programmation, ben ça m'a l'air plutôt bien parti dis donc, chapeau. Et je suppose que tu es tout jeune en plus de ça (ce qui n'es plus mon cas ;-(( ).
Continue comme ça , bon courage et bonne chance pour la suite ;-))
PS. Billy avait promis de venir coller le résultat de son travail une fois fini, mais il n'a pas tenu ses promesses.
Yes, à part que l'avertissement c'était plutôt dans l'autre sens, c'est à dire :
Pour une utilisation optimale de de ce script, veuillez bien faire attention à supprimer l'espace rajouté entre les crochets ouvrants des expressions de test... (espace rajouté pour faire face à la mise en page des balises internes au forum)
Mais bon c'est pas grave, si ça marche pas, ils viendront nous en faire part sur le forum ;-))
Sinon d'un point de vue"professionnel" tu en penses quoi ?
Professionnel c'est un bien grand mot, juste passionné tout au plus ;-)))
Bon honnêtement j'y ai jeté juste un œil comme ça dans les grandes lignes et j'ai pas eu le temps de le tester, mais bon je te fais confiance si tu dis que ça à l'air correct (à part quelques petites imperfections que tu dis...).
Sinon si c'est vrai que ça ne fait que 6 mois que tu t'es mis à l'informatique et à la programmation, ben ça m'a l'air plutôt bien parti dis donc, chapeau. Et je suppose que tu es tout jeune en plus de ça (ce qui n'es plus mon cas ;-(( ).
Continue comme ça , bon courage et bonne chance pour la suite ;-))
PS. Billy avait promis de venir coller le résultat de son travail une fois fini, mais il n'a pas tenu ses promesses.
Ah désolé pour l'avertissement, j'essayerai de m'appliquer un peu plus la prochaine fois! ;)
"Professionnel c'est un bien grand mot"
C'est pour ça que j'ai mis professionnel entre "", expert ou spécialiste aurait été plus approprié....... :)
Bon sur ma machine ça marche en tout cas, les petites imperfections c'est juste au cas on insére la même lettre deux fois, j'aimerais y rajouter un test qui permet de prévenir le joueur que la lettre a déjà été essayé, sinon ya un message d'erreur de grep, et pis juste préciser au joueur qu'on son tour est passé et que l'autre joueur peux commencer! ( c'est juste un ou deux echo a rajouter mais j'avais plus le courage... )
En recomptant les mois ça fait un peu plus.... j'ai fait, en fevrier, une formation forem( anpe belge ) en html et j'ai enchainé direct avec la formation unix, une belle occasion, formation unix, sql+ gratuite ensuite séminaire, si positive on par a brighton suivre soit des cours java ou du testing ou de la finance ou du .net et ensuite pour rembourser tout ça en bosse pour l'entreprise pendant 2 ans, avec un bon p'tit salaire!
J'ai vraiment galéré au début vu que pas de bases du tout, à part le html qui fut facile, et ça fait depuis septembre que je m'y suis vraiment mis du coup bin, j'ai progressé un peu :)
Suis jeune oui mais je commence a vieillir ;) j'ai 24 ans, je ne te demande pas ton age.......................... :)
Si je revois billy je lui dirait de le poster ici, si il a encore une copie de son script, mais a mon avis il doit être assez proche du tiens...
Merci et bonne continuation a toi aussi :)
A+
"Professionnel c'est un bien grand mot"
C'est pour ça que j'ai mis professionnel entre "", expert ou spécialiste aurait été plus approprié....... :)
Bon sur ma machine ça marche en tout cas, les petites imperfections c'est juste au cas on insére la même lettre deux fois, j'aimerais y rajouter un test qui permet de prévenir le joueur que la lettre a déjà été essayé, sinon ya un message d'erreur de grep, et pis juste préciser au joueur qu'on son tour est passé et que l'autre joueur peux commencer! ( c'est juste un ou deux echo a rajouter mais j'avais plus le courage... )
En recomptant les mois ça fait un peu plus.... j'ai fait, en fevrier, une formation forem( anpe belge ) en html et j'ai enchainé direct avec la formation unix, une belle occasion, formation unix, sql+ gratuite ensuite séminaire, si positive on par a brighton suivre soit des cours java ou du testing ou de la finance ou du .net et ensuite pour rembourser tout ça en bosse pour l'entreprise pendant 2 ans, avec un bon p'tit salaire!
J'ai vraiment galéré au début vu que pas de bases du tout, à part le html qui fut facile, et ça fait depuis septembre que je m'y suis vraiment mis du coup bin, j'ai progressé un peu :)
Suis jeune oui mais je commence a vieillir ;) j'ai 24 ans, je ne te demande pas ton age.......................... :)
Si je revois billy je lui dirait de le poster ici, si il a encore une copie de son script, mais a mon avis il doit être assez proche du tiens...
Merci et bonne continuation a toi aussi :)
A+
J'ai juste oublié un truc, j'y ai repenser cet après midi en me levant :) , j'utilise le fichier words dans lequel je recherche un mot au hasard.
hazard=$(echo $((($RANDOM%15)+1)))
word=$(cat words | head -$hazard | tail -1)
N'oubliez pas de le recréer pour un bon fonctionnement de ce script!
Désolé pour l'oubli!
hazard=$(echo $((($RANDOM%15)+1)))
word=$(cat words | head -$hazard | tail -1)
N'oubliez pas de le recréer pour un bon fonctionnement de ce script!
Désolé pour l'oubli!
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 janv. 2008 à 18:59
17 janv. 2008 à 18:59
Merci de l'info ;-))
Bon sur ma machine ça marche en tout cas, les petites imperfections c'est juste au cas on insére la même lettre deux fois, j'aimerais y rajouter un test qui permet de prévenir le joueur que la lettre a déjà été essayé,
Rajoute ça dans ta fonction "oneplayer" (adapte pour la fonction "<ital>twoplayer"</ital>) après le 1er "clear" :
sinon ya un message d'erreur de grep,
A quel niveau ? (numéro de ligne)
;-))
Bon sur ma machine ça marche en tout cas, les petites imperfections c'est juste au cas on insére la même lettre deux fois, j'aimerais y rajouter un test qui permet de prévenir le joueur que la lettre a déjà été essayé,
Rajoute ça dans ta fonction "oneplayer" (adapte pour la fonction "<ital>twoplayer"</ital>) après le 1er "clear" :
grep -o "$letter" <<< "$letterguessed" >/dev/null retour=$? if [ "$retour" -eq 0 ] then echo "LETTER ALREADY CHOOSEN" continue fi
sinon ya un message d'erreur de grep,
A quel niveau ? (numéro de ligne)
;-))
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
18 janv. 2008 à 00:08
18 janv. 2008 à 00:08
Bien le merci a toi, j'imaginais un truc dans se style mais j'aurais continué avec 0) echo letter already choosen etc... donc, encore merci.
Aussi je me demandais si il était utile de rajouter des test au cas où deux lettres ou plusieurs était selectioné, ça serait bien de prévenir le joueur qu'il doit rentré une seule lettre a la fois mais quand même permettre au joueur de rentré le bon en une fois mais si il loupe il est pendu, je vais me casser un peu la tête la dessus j'ai des idées dans la tête mais faut que j'me motive a lancer mon putty et à faire tout ça..... on verras demain :)
pour le message d'erreur du grep, il apparait si on on valide la lettre alors que aucune valeur n'est rentré donc a ""read letter"" ligne 33, il suffit de rentré une lettre après et c'est bon mais y'a le message qui fait pas beau!
Ça existe pas ça un test genre if $machin = vide then..... ? Me fais-je comprendre au moins? :)
Bon je vais allez rajouter ces quelques lignes dans mon script.
A bientôt, surement....
Edit: ça marche nikel ( le contraire m'aurait étonné mais bon on ne sait jamais :) ). encore merci.
Aussi je me demandais si il était utile de rajouter des test au cas où deux lettres ou plusieurs était selectioné, ça serait bien de prévenir le joueur qu'il doit rentré une seule lettre a la fois mais quand même permettre au joueur de rentré le bon en une fois mais si il loupe il est pendu, je vais me casser un peu la tête la dessus j'ai des idées dans la tête mais faut que j'me motive a lancer mon putty et à faire tout ça..... on verras demain :)
pour le message d'erreur du grep, il apparait si on on valide la lettre alors que aucune valeur n'est rentré donc a ""read letter"" ligne 33, il suffit de rentré une lettre après et c'est bon mais y'a le message qui fait pas beau!
Ça existe pas ça un test genre if $machin = vide then..... ? Me fais-je comprendre au moins? :)
Bon je vais allez rajouter ces quelques lignes dans mon script.
A bientôt, surement....
Edit: ça marche nikel ( le contraire m'aurait étonné mais bon on ne sait jamais :) ). encore merci.
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
18 janv. 2008 à 10:05
18 janv. 2008 à 10:05
Rajoute ça dans ton script :
;-))
then until [ [ $life = 0 ]] do unset letter echo "you have $life live left" echo "You tryed this letter(s) : $letterguessed" echo ${word//[^$checkletter]/_} echo "will you find the word $name1?" echo "try a letter :" read letter clear if [ "$letter" = "" ] then echo "YOU HAVE TO CHOOSE A LETTER" continue fi grep -o "$letter" <<< "$letterguessed" >/dev/null retour=$?idem pour le "twoplayers" en adaptant... n'oublie pas les quotes surtout...
;-))
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
18 janv. 2008 à 19:11
18 janv. 2008 à 19:11
Merci, me sens un peu bête de ne pas y avoir pensé, surtout que j'utilise les "" dans ma déclaration de variables..... :)
Par contre pourquoi unset letter ? Je viens de faire un test sans et ça fonctionne bien comme ça.
Par contre pourquoi unset letter ? Je viens de faire un test sans et ça fonctionne bien comme ça.
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
18 janv. 2008 à 19:17
18 janv. 2008 à 19:17
Pour le plaisir ;-))
Non, effectivement ça ne sert à rien, le fait de valider sans entrer de lettre initialise la variable à rien. Dans mon raisonnement de ce matin je pensais quelle pouvait contenir le résultat précédent ;-[
Merci de me l'avoir signaler ;-))
Non, effectivement ça ne sert à rien, le fait de valider sans entrer de lettre initialise la variable à rien. Dans mon raisonnement de ce matin je pensais quelle pouvait contenir le résultat précédent ;-[
Merci de me l'avoir signaler ;-))
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
18 janv. 2008 à 19:47
18 janv. 2008 à 19:47
Pas d'prob ;)
J'ai eu un doute aussi, c'est pour ça que j'ai fait le test, ça me paraissais logique mais vu que l'on compare une nouvelle lettre à chaque fois son utilité me semblât donc inutile. ( oh tiens une utilité inutile... :) )
J'ai corrigé mes imperfections et rajouté les lignes de test que tu m'as pondu, il me reste plus que à faire 2 ou 3 dernier test et je pense qu'il sera bien boulonné de partout.
Bonne soirée.
J'ai eu un doute aussi, c'est pour ça que j'ai fait le test, ça me paraissais logique mais vu que l'on compare une nouvelle lettre à chaque fois son utilité me semblât donc inutile. ( oh tiens une utilité inutile... :) )
J'ai corrigé mes imperfections et rajouté les lignes de test que tu m'as pondu, il me reste plus que à faire 2 ou 3 dernier test et je pense qu'il sera bien boulonné de partout.
Bonne soirée.
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
22 janv. 2008 à 20:30
22 janv. 2008 à 20:30
Et voilà j'ai reussi mon dernier ""petit"" test, donc le joueur peux rentrer une seule lettre a la fois mais il peux tout de même essayer de trouver le mot en le tapant en entier, mais si il se trompe il a perdu!
Je n'ai pas encore essayé avec le deuxiéme joueurs mais techniquement ça devrait être ok!!!! edit: ça fonctionne, voir plus bas!
A placer juste aprés "read letter".
Bon bin j'ai passé plus de temps a éditer ce post pour le rendre lisible( c'etait un peu le bronx quand j'ai fait le premier "visualiser" ) que à taper les lignes de codes pour réussir ce script......................
Je n'ai pas encore essayé avec le deuxiéme joueurs mais techniquement ça devrait être ok!!!! edit: ça fonctionne, voir plus bas!
A placer juste aprés "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 WAS: $word2" fi playagain elif [ [ $Nletter = $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
Bon bin j'ai passé plus de temps a éditer ce post pour le rendre lisible( c'etait un peu le bronx quand j'ai fait le premier "visualiser" ) que à taper les lignes de codes pour réussir ce script......................
hugnix
Messages postés
119
Date d'inscription
samedi 9 juin 2007
Statut
Membre
Dernière intervention
27 avril 2009
22 janv. 2008 à 21:17
22 janv. 2008 à 21:17
Je ne suis pas arrivé a éditer le post précédent pour rajouter ceci.
C'est le test supplémentaires mais pour le deuxiéme joueur:
A placer juste après ""read letter2""
Bon bin je pense que ce script/jeux doit être assez complet comme ça, si je trouve des trucs a rajouter, je vous en ferez part!!!
Peut être que un peu de couleurs pourrais améliorer la visibilité.
C'est le test supplémentaires mais pour le deuxiéme joueur:
A placer juste après ""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 && $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
Bon bin je pense que ce script/jeux doit être assez complet comme ça, si je trouve des trucs a rajouter, je vous en ferez part!!!
Peut être que un peu de couleurs pourrais améliorer la visibilité.
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 à 21:42
22 janv. 2008 à 21:42
Mais c'est qu'il est doué ce d'jeuns ;-)))
Merci en tout cas ;-))
Merci en tout cas ;-))