IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

pierre papier ciseaux shell


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut pierre papier ciseaux shell
    bonjour,
    voila je viens demander votre aide sur un script en shell portant sur pierre papier ciseaux.

    mais le problème est que je suis débutant et que le prof nous pose sa de but en blanc. Après plusieurs recherche sur internet j'ai réussi à trouver des informations.

    echo -n "enter name player1: "
    read player1


    echo "$player1"
    echo "rock 1"
    echo "paper 2"
    echo "cissors 3"
    echo "end 5"
    echo -n "choie $player1 : "
    read choice1
    donc logiquement j'ai ca dans 2 fichier séparé pour les 2 joueur (variable :choice1;choice2;player1;player2)

    et dans un troisième j'ai pour le moment ceci

    if $choice1<$choise2
    then
    echo $player2 win
    fi

    if $choise1>$choise2
    then
    echo $player1 win
    fi

    if $choice1=$choise2
    then
    no winner
    fi

    if $choise1=1 && $choise2=3
    then
    echo $player1 win
    fi

    if $choise1=3 && $choise2=1
    then
    echo $player1 win
    fi
    mes problèmes son que je ne sais pas récupérer une variable d'un fichier à l'autre pour les comparaisons.

    Ensuite mon fichier pour comparer ne fonctionne pas, sachant que pour le moment je n'est pas mit dans ce dernier le code permettant d'écrire dans un fichier txt les résultats

    [edit 1] je viens de voir que mes variable n'apparaisse pas dans le dash, comment remédier à cela ?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    L'instruction "if" ne peut tester que le status d'un programme. Donc il faut écrire "if programme" => signifiant "si le programme est vrai alors..."

    if $choice1<$choice2 ne marchera pas vu que $choice1 n'est pas un programme, c'est une variable. Si tu veux comparer 2 variables, il te faut utiliser le programme "test" qui sert à ça et qui, lui, est bien un programme
    if test $choice1 -lt $choice2

    Citation Envoyé par Phoenix2025
    mes problèmes son que je ne sais pas récupérer une variable d'un fichier à l'autre pour les comparaisons.
    On ne peut pas récupérer une variable d'un script à un autre. On ne peut que récupérer une valeur stockée dans un fichier.
    Exemple: t'as un fichier "toto" qui contient
    variable :choice1;choice2;player1;player2
    En tapant , tu récupères dans ta variable "lig" le contenu du fichier "toto"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    merci pour ton aide j'avance

    mais comment tu fait pour les deux fichiers qui me servent au joueur ? pour rentrer les valeurs dans un fichier comme tu me là expliqué vue que c'est le seul moyen pour pouvoir les faire lire pas un autre script.

    je croyait que si ces dernières était contenu dans le dash on pouvais les réutiliser.

    voici mes fichiers maintenant
    echo -n "enter name player1: "
    read player1
    echo "$player1"
    echo "rock 1"
    echo "paper 2"
    echo "cissors 3"
    echo "end 5"
    echo -n "choie $player1 : "
    read choice1
    toto:choise1;player1
    lig=`cat toto`
    if test $choice1 It $choise2
    then
    echo $player2 win
    fi

    if test $choise1 It $choise2
    then
    echo $player1 win
    fi

    if test $choice1= It$choise2
    then
    no winner
    fi

    if test $choise1=1 && It $choise2=3
    then
    echo $player1 win
    fi

    if test $choise1=3 && It $choise2=1
    then
    echo $player1 win
    fi

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    voila après pas mal de travail j'ai réussi à insérer les variables des 2 premier fichiers dans un .txt

    mais j'ai un problème dans la 2eme parti plutôt gênant car il m'empêche de tester cette partie. Quand j'essaie de le lancer j'ai fin de fichier prématuré


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #!/bin/bash
     
     
    echo -n "enter name player1: "
    read player1
    player1=$player1
    export player1
     
     
     
    echo "$player1"
     
    echo "rock 1"
    echo "paper 2"
    echo "scissors 3"
    echo "end 4"
    echo -n "choice of $player1 : "
    read -s choice1 
    echo ""
     
     
    echo -n "enter name player2: "
    read player2
     
    echo "$player2"
    echo "rock 1"
    echo "paper 2"
    echo "scissors 3"
    echo "end 4"
    echo -n "choise $player2 : "
    read -s choice2
    echo""
     
     
    echo $player1 > toto.txt
    echo $choice1 >> toto.txt
    echo $player2 >> toto.txt
    echo $choice2 >> toto.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #!/bin/bash
     
    cat toto.txt | while read ligne
    do
    set $(echo $ligne)
    init_p=$(eval echo $1)
    player1=$(eval echo $2)
    choice1=$(eval echo $3)
    player2=$(eval echo $4)
    choise2=$(eval echo $5)
    #echo -e "player1=$player1\nplayer2=$player2\nchoise1=$choise1\nchoise2=$choise2\n"
    done
     
    if [ $choice1 > $choise2 ]
     then 
       echo $player2 win >> toto.txt
    fi
     
    if [ $choise1 < $choise2 ]
     then
       echo $player1 win >> toto.txt
    fi
     
    if [ "$choice1" =  "$choise2" ]
     then 
       echo no winner >> toto.txt
    fi
     
    if [ $choise1="1" ] || [ $choise2="3" ]
     then
       echo $player1 win >> toto.txt
    fi
     
    if [ $choise1="3" ] || [ $choise2="1" ]
     then
       echo $player2 win >> toto.txt
    fi

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cat toto.txt | while read ligne
    do
    set $(echo $ligne)
    player1=$(eval echo $1)
    choice1=$(eval echo $2)
    player2=$(eval echo $3)
    choise2=$(eval echo $4)
    echo -e "player1=$player1\nplayer2=$player2\nchoise1=$choise1\nchoise2=$choise2\n"
    cette partie n est pas correcte

    je l aurais fait ainsi mais dis moi si tu veux garder ta syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    player1=`cat toto.txt | sed -n '1p'`
    choise1=`cat toto.txt | sed -n '2p'`
    player2=`cat toto.txt | sed -n '3p'`
    choise2=`cat toto.txt | sed -n '4p'`
    echo -e "player1=$player1\nplayer2=$player2\nchoise1=$choise1\nchoise2=$choise2\n"


    Après la suite ça ne vas pas non plus, la syntaxe est bonne mais le fonctionnement non :

    Le joueur1 a son choix a 2 et le joueur2 a 3

    donc $choise1 < $choise2 ==> echo $player1 win >> toto.txt
    après $choise2="3" ==> echo $player1 win >> toto.txt


    Je ne sais pas comment tu veux le faire fonctionner ( tes différentes règles ) mais elles doivent s'appliquer une unique fois.

    Le plus simple serait de fonctionner avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    si choix1==x && choix2==y =>> tel traitement
    si choix1==y ....
    vu le faible nombre de possibilités ce n'est pas très lourd (ça en fait 7 avec un test d'egalité en premier) mais c'est a toi de décider

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    j'ai suivi tes instructions mais j'ai toujours là même erreur récurante : fin de fichier prématurée

    voici le nouveau code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #!/bin/bash -x
     
     
     
    player1=`cat toto.txt | sed -n '1p'`
    choice1=`cat toto.txt | sed -n '2p'`
    player2=`cat toto.txt | sed -n '3p'`
    choice2=`cat toto.txt | sed -n '4p'`
     
     
    if $choice1=="1" && $choice2=="2" ==> echo "$player2 win" >>toto.txt fi
    if $choice1=="1" && $choice2=="3" ==> echo "$player1 win" >>toto.txt fi
    if $choice1=="2" && $choice2=="1" ==> echo "$player1 win" >>toto.txt fi
    if $choice1=="2" && $choice2=="3" ==> echo "$player2 win" >>toto.txt fi
    if $choice1=="1" && $choice2=="1" ==> echo "no winner" >>toto.txt fi
    if $choice1=="3" && $choice2=="2" ==> echo "no winner" >>toto.txt fi
    if $choice1=="3" && $choice2=="3" ==> echo "no winner" >>toto.txt fi
    [EDIT]en ce qui concerne les variables player et choice cela fonction super merci[/EDIT]

Discussions similaires

  1. Pierre Feuille Ciseaux
    Par Wilvart dans le forum C++
    Réponses: 12
    Dernier message: 20/08/2006, 13h19
  2. [Datareport] Etat plus large que le papier
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/09/2002, 11h45
  3. [Système] Vider le Presse Papier
    Par babe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/09/2002, 17h46
  4. [Kylix] probleme pour lancer le shell
    Par miky dans le forum EDI
    Réponses: 5
    Dernier message: 13/08/2002, 09h39
  5. Copier une image (jpeg) dans le presse papier
    Par benj63 dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/07/2002, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo