Script bash avancé
billy
-
hugnix Messages postés 124 Statut Membre -
hugnix Messages postés 124 Statut Membre -
Bonjour, je dois faire un script en bash pour un tp. Il s'agit d'une émulation du jeu du pendu "hangman".
Le mot à trouver doit être remplacé par des "_", et chaque fois que la lettre donnée par le joueur ne correspond pas à la lettre du mot caché, alors il perd une vie...le joueur possède autant de vie que de lettre dans le mot.
voici mon début de script :
#!/bin/bash set -xv
#case one player :
function one_player () {
stored_word="java delphi testing analyst unix linux windows"
#word is randomly generated
word=$($RANDOM $stored_word)
echo "mot a trouver: $($word//"[a-z-A-Z-0-9]"/"_")" #pour remplacer le mot par des "_"
}
#case two player:
function two_players () {
echo "player one, enter your name:"
read play1
echo "player two, enter your name:"
read play2
#word is entered by the winner (nota=> the beginner is play1)
}
#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 # appel à la fonction one_player
;;
"2") two_players # appel à la fonction two_players
;;
"3") echo "GOOD BYE"
;;
*)
esac
merci pour votre aide et vos explications.
Le mot à trouver doit être remplacé par des "_", et chaque fois que la lettre donnée par le joueur ne correspond pas à la lettre du mot caché, alors il perd une vie...le joueur possède autant de vie que de lettre dans le mot.
voici mon début de script :
#!/bin/bash set -xv
#case one player :
function one_player () {
stored_word="java delphi testing analyst unix linux windows"
#word is randomly generated
word=$($RANDOM $stored_word)
echo "mot a trouver: $($word//"[a-z-A-Z-0-9]"/"_")" #pour remplacer le mot par des "_"
}
#case two player:
function two_players () {
echo "player one, enter your name:"
read play1
echo "player two, enter your name:"
read play2
#word is entered by the winner (nota=> the beginner is play1)
}
#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 # appel à la fonction one_player
;;
"2") two_players # appel à la fonction two_players
;;
"3") echo "GOOD BYE"
;;
*)
esac
merci pour votre aide et vos explications.
A voir également:
- Script bash choix multiple
- Excel cellule choix multiple - Guide
- Script vidéo youtube - Guide
- Ecran multiple pc - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
40 réponses
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.
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
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
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
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.
Ç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!
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)
;-))
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.
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...
;-))
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.
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.
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......................
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é.