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

Pascal Discussion :

Jeu pierre feuille ciseaux : victoire mal détectée


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Zankou
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 28
    Par défaut Jeu pierre feuille ciseaux : victoire mal détectée
    Bonjour,

    voilà j'ai envie de faire un pierre feuille ciseaux, or j'ai un problème que je n'arrive pas trop à capter : en gros chaque signe est lié a une valeur (1,2 ou 3) et si vous lisez mon code vous pouvez comprendre comme le jeu marche (c'est assez simple à comprendre).
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    program PFC;
    uses wincrt,crt;
    Var X,N,Compteur1,Compteur2,Choix:integer;
      Verif,MotJ,ChoixIA:string;
     
    begin
     
      Randomize;
      Verif:='';N:=0;Compteur1:=0;Compteur2:=0;
     
      WRITELN('                     Pierre Feuille ciseaux!');
      WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;
      WRITE('Voulez vous connaitre les ''regles'' ou ''jouer'' ? ');READLN(Verif);
     
      if (Verif='regles') then
         BEGIN
           Clrscr;
           WRITELN('Le jeux est tres connu');
           WRITELN('Le joueur choisit entre:');
           WRITELN('   -(1) la feuille');
           WRITELN('   -(2) la pierre');
           WRITELN('   -(3) les ciseaux');
           WRITELN('Le joueur indiquera donc le numero de l''element qu''il veut jouer.');
           WRITELN('La feuille enveloppe la pierre, la pierre casse les ciseaux, et les ciseaux coupent la feuille.');
           WRITELN('Le puit n''existant pas dans la version originale du jeu, il n''existe pas non plus ici.');
     
           WRITELN;
           WRITE('Voulez vous jouer ? ');READLN(Verif);
         end;
      if (Verif='jouer') then
         BEGIN
           Verif:='oui';
         end;
      Clrscr;
     
      While (Verif='oui') DO
            BEGIN
              X:=random(3)+1;
              WRITE('Faite votre choix: ');READLN(Choix);
     
              if ((X=1) and (Choix=3)) then
                 BEGIN
                   X:=3;
                   Choix:=1;
                 end;
              if ((X=3) and (Choix=1)) then
                 BEGIN
                   X:=1;
                   Choix:=3;
                 end;
     
              if (X=1) then
                 BEGIN
                   ChoixIa:='la feuille'
                 end;
              if (X=2) then
                 BEGIN
                   ChoixIa:='la pierre'
                 end;
              if (X=3) then
                 BEGIN
                   ChoixIa:='les ciseaux'
                 end;
     
              if (Choix=1) then
                 BEGIN
                   MotJ:='la feuille'
                 end;
              if (Choix=2) then
                 BEGIN
                   MotJ:='la pierre'
                 end;
              if (Choix=3) then
                 BEGIN
                   MotJ:='les ciseaux'
                 end;
     
              if (X>Choix) then
                 BEGIN
                   WRITELN('L''IA a choisit ',ChoixIA,' donc, ',MotJ,' gagne');
                   WRITE('Le joueur remporte donc la manche, voulez vous continuer ? ');READLN(Verif);
                   Compteur1:=Compteur1+1;
                   Compteur2:=Compteur2+1;
                   N:=N+1;
                   Clrscr;
                 end;
              if (X<Choix) then
                 BEGIN
                   WRITELN('L''IA a choisit ',ChoixIA,' donc, ',MotJ,' perd');
                   WRITE('Le joueur ne remporte donc pas la manche, voulez vous continuer ? ');READLN(Verif);
                   Compteur1:=0;
                   N:=N+1;
                   Clrscr;
                 end;
              if (X=Choix) then
                 BEGIN
                   WRITELN('L''IA a choisit ',ChoixIA,' et le joueur ',MotJ);
                   WRITE('Il y a donc match nul, voulez vous continuer ? ');READLN(Verif);
                   Compteur1:=0;
                   N:=N+1;
                   Clrscr;
                 end;
     
            end;
      WRITELN('Avant de quitter le jeu, un petit recapitulatif s''impose.');
      WRITELN('Le joueur a enchaine ',Compteur1,' avant de quitter la parite.');
      WRITELN('Mais il a aussi fait ',Compteur2,' avant de quitter la partie.');
      WRITELN('Le joueur a joue un total de ',N,' manches.');
     
     
     
    READLN;
    end.
    Voici mon code ci-dessus, le problème c'est que des fois il m'affiche que le joueur a perdu, alors qu'il est censé avoir gagné.

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Le problème c'est que la différence de grandeur entre les trois nombres n'a rien à voir avec leur puissance dans le jeu.

    Il n'y a pas seulement trois cas à examiner, mais neuf.

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    11
    12
    13
    21
    22
    23
    31
    32
    33

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 493
    Par défaut
    Salut

    C'est surtout que tu modifies ta variable avant de contrôler.

    Regarde le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        if ((X=1) and (Choix=3)) then
        BEGIN
           X:=3;
           Choix:=1;
        END;
     
        if ((X=3) and (Choix=1)) then
        BEGIN
           X:=1;
           Choix:=3;
        end;
    J'ai un peu reorganisé ton code pour plus de clarté :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    program PFC;
    uses wincrt,crt;
    Var X,N,Compteur1,Compteur2,Choix:integer;
      Verif,MotJ,ChoixIA:string;
     
     
     
    Procedure EcranAceuil ;
    BEGIN
      WRITELN('                     Pierre Feuille ciseaux!');
      WRITELN;
      WRITELN;
      WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;
      WRITE('Voulez vous connaitre les (R)egles ou (J)ouer ? ');
    END; 
     
    Procedure EcranAide ;
    BEGIN
      Clrscr;
      WRITELN('Le jeux est tres connu');
      WRITELN('Le joueur choisit entre:');
      WRITELN('   -(1) la feuille');
      WRITELN('   -(2) la pierre');
      WRITELN('   -(3) les ciseaux');
      WRITELN('Le joueur indiquera donc le numero de l''element qu''il veut jouer.');
      WRITELN('La feuille enveloppe la pierre, la pierre casse les ciseaux, et les ciseaux coupent la feuille.');
      WRITELN('Le puit n''existant pas dans la version originale du jeu, il n''existe pas non plus ici.');
      WRITELN;
      WRITE('Voulez vous (J)ouer ? ');
    END; 
     
    Fonction DonneLibel(Aval : Integer) : String;
    BEGIN
       CASE Aval OF 
    	  1 : RESULT:='la feuille';
          2 : RESULT:='la pierre';
          3 : RESULT:='les ciseaux';
      END;
    END;
    Procedure EcranFin(Cpt1,Cpt2,Nb : Integer);
    BEGIN
      WRITELN('Avant de quitter le jeu, un petit recapitulatif s''impose.');
      WRITELN('Le joueur a enchaine ',Cpt1,' avant de quitter la parite.');
      WRITELN('Mais il a aussi fait ',Cpt2,' avant de quitter la partie.');
      WRITELN('Le joueur a joue un total de ',Nb,' manches.');
    END;
    ////////////////////////////////////////////////////////////////////////////////
    begin
      Randomize;
      Verif:='';
      N:=0;
      Compteur1:=0;
      Compteur2:=0;
      EcranAceuil; 
      READLN(Verif);
     
      if (Uppercase(Verif)='R') then // connaitre les regle
      BEGIN
        EcranAide;
    	READLN(Verif);
      end;
      if (Uppercase(Verif)='J') then
      BEGIN
        Verif:='O';
      end;
      Clrscr;
      While (Verif='O') DO
      BEGIN
         X:=random(3)+1;// Choix Robot
         WRITE('Faite votre choix: ');
    	 READLN(Choix);
     
        if ((X=1) and (Choix=3)) then
        BEGIN
           X:=3;
           Choix:=1;
        END;
     
    	 if ((X=3) and (Choix=1)) then
         BEGIN
           X:=1;
           Choix:=3;
        end;
     
        ChoixIa := DonneLibel(X) ;
    	MotJ    := DonneLibel(Choix) ;
     
        if (X>Choix) then
        BEGIN
          WRITELN('L''IA a choisit ',ChoixIA,' donc, ',MotJ,' gagne');
          WRITE('Le joueur remporte donc la manche, voulez vous continuer ? (O)/(N) ');READLN(Verif);
          Compteur1:=Compteur1+1;
          Compteur2:=Compteur2+1;
          N:=N+1;
          Clrscr;
        END
    	Else 
    	BEGIN
          If (X<Choix) then
          BEGIN
            WRITELN('L''IA a choisit ',ChoixIA,' donc, ',MotJ,' perd');
            WRITE('Le joueur ne remporte donc pas la manche, voulez vous continuer ? (O)/(N)');READLN(Verif);
            Compteur1:=0;
            N:=N+1;
            Clrscr;
          END
    	  ELSE // (X=Choix)
          BEGIN
            WRITELN('L''IA a choisit ',ChoixIA,' et le joueur ',MotJ);
            WRITE('Il y a donc match nul, voulez vous continuer ? (O)/(N) ');READLN(Verif);
            Compteur1:=0;
            N:=N+1;
            Clrscr;
          END;
        END;
      END;	
      EcranFin(Compteur1,Compteur2,N);
      READLN;
    end.

  4. #4
    Membre averti Avatar de Zankou
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 28
    Par défaut
    Roland Chastain: Oui j'avais bien conscience du fait qu'il y ait 9 possibilités, le problème (que je ne comprends toujours pas) est que même si je modifie leurs valeurs au bon moment, ça ne fonctionne toujours pas. Mais merci quand même.

    anapurna: Alors, merci du programme que tu as fait. Mais je dois le faire en application simple, ensuite je ne comprend pas vraiment comment fonctionne ton code et en quoi il est. Mais merci à toi d'avoir pris ton temps pour m'avoir répondu.

    Voici le "nouveau" code que j'ai fait.

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    program PFC;
    uses wincrt,crt;
    Var X,N,Compteur1,Compteur2,Choix:integer;
      Verif,MotJ,ChoixIA:string;
     
    begin
     
      Randomize;
      Verif:='';N:=0;Compteur1:=0;Compteur2:=0;MotJ:='';
     
      WRITELN('                     Pierre Feuille ciseaux!');
      WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;WRITELN;
      WRITE('Voulez vous connaitre les ''regles'' ou ''jouer'' ? ');READLN(Verif);
     
      if (Verif='regles') then
         BEGIN
           Clrscr;
           WRITELN('Le jeux est tres connu');
           WRITELN('Le joueur choisit entre:');
           WRITELN('   -(1) la feuille');
           WRITELN('   -(2) la pierre');
           WRITELN('   -(3) les ciseaux');
           WRITELN('Le joueur indiquera donc le numero de l''element qu''il veut jouer.');
           WRITELN('La feuille enveloppe la pierre, la pierre casse les ciseaux, et les ciseaux coupent la feuille.');
           WRITELN('Le puit n''existant pas dans la version originale du jeu, il n''existe pas non plus ici.');
     
           WRITELN;
           WRITE('Voulez vous jouer ? ');READLN(Verif);
         end;
      if (Verif='jouer') then
         BEGIN
           Verif:='oui';
         end;
      Clrscr;
     
      While (Verif='oui') DO
            BEGIN
              X:=random(3)+1;
              WRITE('Faite votre choix: ');READLN(Choix);
     
     
     
              if (X=1) then
                 BEGIN
                   ChoixIa:='la feuille'
                 end;
              if (X=2) then
                 BEGIN
                   ChoixIa:='la pierre'
                 end;
              if (X=3) then
                 BEGIN
                   ChoixIa:='les ciseaux'
                 end;
     
              if (Choix=1) then
                 BEGIN
                   MotJ:='la feuille'
                 end;
              if (Choix=2) then
                 BEGIN
                   MotJ:='la pierre'
                 end;
              if (Choix=3) then
                 BEGIN
                   MotJ:='les ciseaux'
                 end;
     
              if ((X=1) and (Choix=3)) then
                 BEGIN
                   X:=3;
                   Choix:=1;
                 end;
              if ((X=3) and (Choix=1)) then
                 BEGIN
                   X:=1;
                   Choix:=3;
                 end;
     
              if (X>Choix) then
                 BEGIN
                   WRITELN('L''IA a choisit ',ChoixIA,' donc, ',MotJ,' gagne');
                   WRITE('Le joueur remporte donc la manche, voulez vous continuer ? ');READLN(Verif);
                   Compteur1:=Compteur1+1;
                   Compteur2:=Compteur2+1;
                   N:=N+1;
                   Clrscr;
                 end;
              if (X<Choix) then
                 BEGIN
                   WRITELN('L''IA a choisit ',ChoixIA,' donc, ',MotJ,' perd');
                   WRITE('Le joueur ne remporte donc pas la manche, voulez vous continuer ? ');READLN(Verif);
                   Compteur1:=0;
                   N:=N+1;
                   Clrscr;
                 end;
              if (X=Choix) then
                 BEGIN
                   WRITELN('L''IA a choisit ',ChoixIA,' et le joueur ',MotJ);
                   WRITE('Il y a donc match nul, voulez vous continuer ? ');READLN(Verif);
                   Compteur1:=0;
                   N:=N+1;
                   Clrscr;
                 end;
     
            end;
      WRITELN('Avant de quitter le jeu, un petit recapitulatif s''impose.');
      WRITELN('Le joueur a enchaine ',Compteur1,' avant de quitter la parite.');
      WRITELN('Mais il a aussi fait ',Compteur2,' avant de quitter la partie.');
      WRITELN('Le joueur a joue un total de ',N,' manches.');
     
     
     
    READLN;
    end.
    C'est basiquement le même avec quelques modifications, mais toujours la même erreur que j'ai finalement réussi a déterminer. Quand je fait feuille et que l'ordi fait ciseaux, il gagne, logique, mais quand je fais ciseaux et que lui fait feuille, il gagne, pas logique.

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Vous avez bien compris, dites-vous, qu'il y a neuf possibilités mais vous n'en examinez toujours que trois (A plus petit que B, A égale B, A plus grand que B).

    Cependant, comme j'essayais de l'expliquer, la différence de grandeur entre les nombres n'a aucun rapport avec le fait que l'un ou l'autre soit gagnant. Il n'y a que dans le cas de l'égalité que votre méthode fonctionne. Pour les autres cas, il faut les examiner un par un. Si le joueur a choisi pierre et que l'ordinateur a choisi feuille, alors...

    Inverser la valeur des variables ne servirait qu'à déplacer l'erreur.

  6. #6
    Membre averti Avatar de Zankou
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 28
    Par défaut
    Comme je l'ai dit j'ai compris qu'il n'y avait 9 cas mais, et j'ai oublié de le préciser, je ne m'interesse qu'aux sortis donc soit le joueur perd, soit il gagne, soit il y a match nul. J'ai effectivement fait un autre programme qui gére donc les cas, mais j'aimerais faire un programme qui gère les sortis

Discussions similaires

  1. Pierre Feuille Ciseaux JS
    Par Uisge Beatha dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 24/08/2018, 14h30
  2. pierre papier ciseaux shell
    Par Phoenix2025 dans le forum Linux
    Réponses: 9
    Dernier message: 31/03/2009, 14h02
  3. Aide : Jeu feuille, cailloux, ciseau.
    Par noquioz dans le forum Tkinter
    Réponses: 12
    Dernier message: 01/05/2008, 23h50
  4. Pierre Feuille Ciseaux
    Par Wilvart dans le forum C++
    Réponses: 12
    Dernier message: 20/08/2006, 13h19
  5. [Conception] Concevoir le jeu Pierre Feuille Ciseau
    Par websurfeur dans le forum Général Java
    Réponses: 14
    Dernier message: 17/03/2006, 19h26

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