Problème Jeu pendu Javascool

Fermé
flagadortv Messages postés 4 Date d'inscription mercredi 22 novembre 2017 Statut Membre Dernière intervention 22 novembre 2017 - Modifié le 22 nov. 2017 à 18:18
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 - 22 nov. 2017 à 21:22
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 !
A voir également:

3 réponses

Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 931
22 nov. 2017 à 20:05
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
flagadortv Messages postés 4 Date d'inscription mercredi 22 novembre 2017 Statut Membre Dernière intervention 22 novembre 2017
22 nov. 2017 à 20:12
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
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 931
22 nov. 2017 à 20:42
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
flagadortv Messages postés 4 Date d'inscription mercredi 22 novembre 2017 Statut Membre Dernière intervention 22 novembre 2017
22 nov. 2017 à 20:48
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
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 931
22 nov. 2017 à 21:01
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
flagadortv Messages postés 4 Date d'inscription mercredi 22 novembre 2017 Statut Membre Dernière intervention 22 novembre 2017
22 nov. 2017 à 21:14
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
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 931
22 nov. 2017 à 21:22
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
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
22 nov. 2017 à 21:19
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