Problème Jeu pendu Javascool

flagadortv Messages postés 4 Statut Membre -  
 Utilisateur anonyme -
Salut je débute tout juste le java sous javascool en isn. Je dois faire un pendu simple et pas faire de "machine à gaz". Voici mon code :

void main(){
    int longmot = 0;  
    int coupsrestants = 10; // Le nombre d'essais est défini sur 10  
    println("Entrez un mot");  
    String motadeviner = readString(); // L'utilisateur rentre un mot  
    longmot=motadeviner.length(); // Calcule la longueur du mot  
    println("Au tour du joueur 2,le mot contient " + longmot + " caractères !");  
while (coupsrestants > 0) { // tant qu'il reste des essais  
    println("Entrez une lettre");  
    char lettre=readChar(); // L'utilisateur propose une lettre  
    for (int i=0; i < longmot; i++) { //I augmente de 1 jusqu'au nombre de lettres dans le mot      
        if(motadeviner.charAt(i)==lettre){ //Si la lettre proposée est contenue dans le mot          
            println("le mot contient la lettre " + lettre + " à la position" + i); //afficher ou elle est      
    }
            else {
            coupsrestants = coupsrestants - 1; // on perd un essai          
            println("il vous reste " + coupsrestants + " essais"); // affiche le nombre d'essais restants      
            } 
    }  

Le poblème c'est que lorsque je propose une lettre, même si le mot proposé par le joueur 1 contient cette lettre, je perdrais une vie pour chaque lettre du mot qui n'est pas la même que celle que j'ai proposé. Par conséquent je perd à chaque fois (le nombre de lettre du mot - le nombre de fois qu'apparait la lettre que j'ai proposé dans ce mot) Donc je perd des vies meme si le mot contient la lettre que j'ai proposé, et j'en perd le nombre de lettres du mot si il ne contient pas la lettre.

Je veux que si le mot contient la lettre que j'ai proposé, je ne perd aucune vie et si le mot ne contient pas la lettre que j'ai proposé, je n'en perd qu'une.

Je dois rendre ça pour demain.

J’espère avoir été assez clair, merci !

3 réponses

  1. Utilisateur anonyme
     
    Bonsoir

    voici ce que tu as écris en pseudo code

    Pour i variant de 0 à longueur de mot -1
    Si la lettre à l'emplacement i du mot est celle proposée alors
    Affiche message
    Sinon
    Perd un vie
    Fin Si
    Fin Pour


    A ton avis où est le problème?
    1
    1. flagadortv Messages postés 4 Statut Membre
       
      Merci, je sais quel est le probleme mais je ne sais pas comment le resoudre proprement, jai réussi à le faire marcher mais ça fait un peu "usine à gaz"..
      Je sais pas quel nom donne à "coupsparmot"
      void main(){
      int longmot = 0;

      int coupsrestants = 6; // Le nombre d'essais est défini sur 6

      println("Entrez un mot");

      String motadeviner = readString(); // L'utilisateur rentre un mot

      longmot=motadeviner.length(); // Calcule la longueur du mot

      println("Au tour du joueur 2,le mot contient " + longmot + " caractères !");

      while (coupsrestants > 0) { // tant qu'il reste des essais

      println("Entrez une lettre");

      char lettre=readChar(); // L'utilisateur propose une lettre
      int coupsparmot = longmot;

      for (int i=0; i < longmot; i++) { //I augmente de 1 jusqu'au nombre de lettres dans le mot

      if(motadeviner.charAt(i)==lettre){ //Si la lettre proposée est contenue dans le mot

      println("le mot contient la lettre " + lettre + " à la position" + i); //afficher ou elle est

      }
      if(motadeviner.charAt(i)!=lettre){ //si la lettre à la position i n'est pas la même que celle proposée


      coupsparmot = coupsparmot - 1;



      }
      if(coupsparmot==0){ // si la lette proposée n'est pas contenue dans le mot
      coupsrestants = coupsrestants - 1; // On perd un essai
      println("il vous reste " + coupsrestants + " essais"); // affiche le nombre d'essais restants

      }

      }


      Voilà. Comment je peu faire pour que ça soit plus "clean" ? Et il faut que j'intègre une fin aussi.
      0
    2. Utilisateur anonyme
       
      Oui il y a certainement plus simple.

      Et comme tu le dis, il faut prévoir la fin.
      Comment savoir si le joueur a trouvé le mot?
      0
    3. flagadortv Messages postés 4 Statut Membre
       
      C'est justement ce que je me demande, j'ai fais une fin si le joueur perd mais je saurais pas faire pour quand il gagne :/
      voilà ou j'en suis :
      void main(){
      int longmot = 0;

      int coupsrestants = 6; // Le nombre d'essais est défini sur 6

      println("Entrez un mot en minuscule");

      String motadeviner = readString(); // L'utilisateur rentre un mot

      longmot=motadeviner.length(); // Calcule la longueur du mot

      println("Au tour du joueur 2,le mot contient " + longmot + " caractères !"); //Affiche le nombre de lettres dans le mot

      while (coupsrestants > 0) { // tant qu'il reste des essais

      println("Entrez une lettre");

      char lettre=readChar(); // L'utilisateur propose une lettre

      int coupsparmot = longmot; // Les "coupsparmot" représente le nombre de possibilitées que le mot contienne la lettre proposée

      for (int i=0; i < longmot; i++) { //I augmente de 1 jusqu'au nombre de lettres dans le mot

      if(motadeviner.charAt(i)==lettre){ //Si la lettre proposée est contenue dans le mot

      println("le mot contient la lettre " + lettre + " à la position " + i); //afficher ou elle est (la position 0 étant la première lettre)

      }
      if(motadeviner.charAt(i)!=lettre){ //si la lettre à la position i n'est pas la même que celle proposée


      coupsparmot = coupsparmot - 1; // On perd une possibilité de bonne lettre

      }
      if(coupsparmot==0){ // si toutes les lettres du mot sont différentes de celle proposée

      coupsrestants = coupsrestants - 1; // On perd un essai

      println("il vous reste " + coupsrestants + " essais"); // affiche le nombre d'essais restants

      }

      }
      }
      if(coupsrestants==0) {
      println("Vous avez perdu, le mot était '" + motadeviner + "'");
      }
      }
      0
  2. Utilisateur anonyme
     
    Un concept (y'en a d'autres), tu stockes les lettres trouvées, quand on en trouve une de plus (à toi de voir comment), le coup est bon, on ne perd pas de vie.
    Quand le coup est bon, on vérifie si les lettres stockées constituent le mot, si oui la partie est gagnée.
    0
    1. flagadortv Messages postés 4 Statut Membre
       
      Je vois, ça va faire trop usine à gaz comme dirait ma prof, je préfère pas mettre de fin, si l'utilisateur suit vraiment, il devrait savoir quand il a trouvé le mot .. Merci beaucoup
      0
    2. Utilisateur anonyme
       
      Alors pour alléger un peu ton code actuel,
      avant la boucle for, tu mets une variable "occurence" à 0.
      Dans la boucle, chaque fois que tu trouves une lettre tu incrémentes cette variable.
      Après la boucle, si la variable vaut toujours 0 alors, tu n'as pas trouvé de lettre.
      0
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Une manière simple de coder est souvent de faire faire à la machine ce que ferait l'homme...

    Par exemple, on me parle pendu, je pense à une ligne genre "______" qu'il faut compléter pour avoir "G_G___" si on devine un G correct et au final on a gagné quand le mot "GAGNER" est complet et identique au mot à trouver.

    Tout ça pour dire qu'à mon avis il te manque ce mot intermédiaire qu'il faut afficher au fur et à mesure et sur lequel baser ton algorithme.

    NB. Techniquement j'utiliserais un char[]
    0