Pendu Jlabel sur java's cool

Résolu/Fermé
mad julio - Modifié par KX le 15/11/2015 à 16:25
madjulio Messages postés 9 Date d'inscription dimanche 15 novembre 2015 Statut Membre Dernière intervention 9 janvier 2016 - 15 nov. 2015 à 19:48
Bonjour,
je demande de l'aide car j'ai un programme à rendre d'urgence qui me pose un problème, d'ailleur le voici :



import javax.swing.*;

Icon image_0= new ImageIcon("pendu_1.png");
Icon image_1= new ImageIcon("pendu_2.png");
Icon image_2= new ImageIcon("pendu_2'.png");
Icon image_3= new ImageIcon("pendu_3.png");
Icon image_4= new ImageIcon("pendu_3'.png");
Icon image_5= new ImageIcon("pendu_4.png");
Icon image_6= new ImageIcon("pendu_4'.png");
Icon image_7= new ImageIcon("pendu_5.png");
Icon image_8= new ImageIcon("pendu_5'.png");

JLabel ma_case2=new JLabel (image_0);
JLabel ma_case1=new JLabel ();




void main(){
 
JLayeredPane pane = getPane();
pane.removeAll();

                String [] chaine = {"GOTY","TRIPLEA","ACTIPOGNON","UBIBUG","KOJIMA","RAGEQUITE","ROULETTE"};
                int X=random(0,4);
                String chaine1=chaine[X];

                int taille_chaine=chaine1.length();
                String chaine2 =("");

pane.removeAll();
pane.add(ma_case2);
ma_case2.setIcon(image_0);
ma_case2 .setBounds(40, 40, 700, 827);
 
 for(int n=0;n<taille_chaine;n++){
  chaine2 = chaine2+("-");
  chaine1=chaine1.substring(0,taille_chaine);
 }

 pane.add(ma_case1);
 ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");

 ma_case1 .setBounds(750, 120, 200, 200);
 
                
                String lettre=readString("choisissez une lettre").toUpperCase();
                int place=chaine1.indexOf(lettre);

                
int a = 0;
if(!lettre.equals(chaine[X])){          
a++;
}

if(a==1){
ma_case2.setIcon(image_1);
ma_case2 .setBounds(40, 40, 700, 827);
}


                
                 while(place!=-1){
                
                 chaine2=chaine2.substring(0,place)+lettre+chaine2.substring(place+1);
                 place=chaine1.indexOf(lettre,place+1);
                 ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");

                 ma_case1 .setBounds(750, 120, 200, 200);
                 }

                 int nombre_de_tirets_restant=chaine2.indexOf("-");
                 while(nombre_de_tirets_restant!=-1){
             if(nombre_de_tirets_restant!=-1){
         String lettre2=readString("choisissez encore une lettre").toUpperCase();
             int place2=chaine1.indexOf(lettre2);
             
int b = 0;

if(!lettre2.equals(chaine[X])){ 
b++;
}if(b==1){
ma_case2.setIcon(image_2);
ma_case2.setBounds(40, 40, 700, 827);
}

int c = 0;

if(!lettre2.equals(chaine[X])){ 
c++;
}if(c==1){
ma_case2.setIcon(image_3);
ma_case2 .setBounds(40, 40, 700, 827);
}

int d = 0;

if(!lettre2.equals(chaine[X])){ 
d++;
}if(d==1){
ma_case2.setIcon(image_4);
ma_case2 .setBounds(40, 40, 700, 827);
}

int e = 0;

if(!lettre2.equals(chaine[X])){ 
e++;
}if(e==1){
ma_case2.setIcon(image_5);
ma_case2 .setBounds(40, 40, 700, 827);
}

int f = 0;

if(!lettre2.equals(chaine[X])){ 
f++;
}if(f==1){
ma_case2.setIcon(image_6);
ma_case2 .setBounds(40, 40, 700, 827);
}

int g = 0;

if(!lettre2.equals(chaine[X])){ 
g++;
}if(g==1){
ma_case2.setIcon(image_7);
ma_case2 .setBounds(40, 40, 700, 827);
}

int h = 0;

if(!lettre2.equals(chaine[X])){ 
h++;
}if(h==1){
ma_case2.setIcon(image_8);
ma_case2 .setBounds(40, 40, 700, 827);
sleep(2000);
ma_case1.setText("<html><h1><font color=red>vous avez perdu! Le mot \u00e9tait"+chaine1+"! Relanc\u00e9 le programme pour réessayer.</font></h1></html>");
ma_case1 .setBounds(0, 0, 1000, 1000);
}
                 
             while (place2!=-1){
                 chaine2=chaine2.substring(0,place2)+lettre2+chaine2.substring(place2+1);
                  place2=chaine1.indexOf(lettre2,place2+1);
                 }
                  ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
                  ma_case1 .setBounds(750, 120, 200, 200);
                 }
                 int nombre_de_tirets_restant_final=chaine2.indexOf("-");
                 if(nombre_de_tirets_restant_final==-1){
                 pane.removeAll();
                 pane.add(ma_case1);
                 ma_case1.setText("<html><h1><font color=blue>vous avez gagn\u00e9, relanc\u00e9 le programme pour rejouer</font></h1></html>");
                 ma_case1 .setBounds(0, 0, 1000, 1000);
                 }}

pane.add(ma_case1);
ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
ma_case1 .setBounds(120, 120, 100, 100);







}



mon problème principale est que je ne trouve pas le moyen de faire en sorte que le prgm passe à l'image suivante QUE si on tape une lettre qui ne fait pas parti du mot choisit et mon autre problème est que une fois qu'on a trouvé toutes les lettres le programme continue de demander de taper des caractère.
Merci de votre attention et de votre compréhension.
A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 nov. 2015 à 16:37
Bonjour,

Ton code est très compliqué à lire (et donc à comprendre).

Pourquoi faire 8 codes différents pour chacune de tes 8 images ?
Il serait plus simple de faire un tableau et d'accéder à tes images en fonction de leur indice (nombre d'erreurs), ça ferait un code plus léger.

De plus, il faut nommer tes variables de sorte que leur nom ait un sens.
Des variables a, b, c, d... qui dépendent de X... c'est pas clair du tout !

Et si tu as déjà vu comment faire, utilises des méthodes intermédiaires, parce que tout mettre dans le main, c'est très lourd !
0
madjulio Messages postés 9 Date d'inscription dimanche 15 novembre 2015 Statut Membre Dernière intervention 9 janvier 2016
15 nov. 2015 à 17:23
tout d'abord merci de ta réponse, et ensuite, je ne vois pas bien ce que tu veux dire quand tu dis "Il serait plus simple de faire un tableau et d'accéder à tes images en fonction de leur indice (nombre d'erreurs)", il faudrait que je refasse un String [] pour des image ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 nov. 2015 à 17:35
On fait un String[] pour les tableaux de String...
Là c'est des Icon que tu manipules donc ce serait plutôt un Icon[]

Icon[] images = {
    new ImageIcon("pendu_1.png"),
    new ImageIcon("pendu_2.png"),
    new ImageIcon("pendu_2'.png"),
    new ImageIcon("pendu_3.png"),
    new ImageIcon("pendu_3'.png"),
    new ImageIcon("pendu_4.png"),
    new ImageIcon("pendu_4'.png"),
    new ImageIcon("pendu_5.png"),
    new ImageIcon("pendu_5'.png")
}

Comme ça, tu n'as plus à manipuler des lettres, a, b, c, d, etc. pour chaque image, il suffit de faire une boucle et de manipuler
images[i]
...

Remarque : ce genre de code est mauvais :

int a = 0;
if (!lettre.equals(chaine[X])) {          
    a++;
}

if(a==1) {
    ma_case2.setIcon(image_1);
    ma_case2 .setBounds(40, 40, 700, 827);
}

Dans la mesure où tu ne te sers jamais de
a
par la suite il vaudrait mieux faire directement :

if (!lettre.equals(chaine[X])) {
    ma_case2.setIcon(image_1); // ou image[1] avec le tableau
    ma_case2 .setBounds(40, 40, 700, 827);
}
0
madjulio Messages postés 9 Date d'inscription dimanche 15 novembre 2015 Statut Membre Dernière intervention 9 janvier 2016 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
15 nov. 2015 à 17:50
oui de base j'avais essayé comme-ça mais le problème c'est qu'à chaque fois que j'exécute le programme il a l'air de considérer la lettre comme fausse quoi qu'il arrive et passe à l'image suivante dès qu'on rentre un caractère. Du coup, je cherche un moyen pour qu'il considère comme vrai le caractère comme bon du moment qu'il fait partie du mot.
Et merci pour le Icon [ ] (et de ta patience).
0
madjulio Messages postés 9 Date d'inscription dimanche 15 novembre 2015 Statut Membre Dernière intervention 9 janvier 2016
15 nov. 2015 à 18:32
alors maintenant j'ai repris le programme à zéro, et le voici qui apparait sous vos yeux ébahit :

import javax.swing.*;

Icon image_0= new ImageIcon("pendu_1.png");
Icon image_1= new ImageIcon("pendu_2.png");
Icon image_2= new ImageIcon("pendu_2'.png");
Icon image_3= new ImageIcon("pendu_3.png");
Icon image_4= new ImageIcon("pendu_3'.png");
Icon image_5= new ImageIcon("pendu_4.png");
Icon image_6= new ImageIcon("pendu_4'.png");
Icon image_7= new ImageIcon("pendu_5.png");
Icon image_8= new ImageIcon("pendu_5'.png");

JLabel ma_case2=new JLabel (image_0);
JLabel ma_case1=new JLabel ();

void main(){

JLayeredPane pane = getPane();
pane.removeAll();

String [] chaine = {"GOTY","TRIPLEA","ACTIPOGNON","UBIBUG","KOJIMA","RAGEQUITE","ROULETTE"};
int X=random(0,4);
String chaine1=chaine[X];

int taille_chaine=chaine1.length();
String chaine2 =("");

pane.add(ma_case2);
ma_case2.setIcon(image_0);
ma_case2 .setBounds(40, 40, 700, 827);

for(int n=0;n<taille_chaine;n++){
chaine2 = chaine2+("-");
chaine1=chaine1.substring(0,taille_chaine);
}

pane.add(ma_case1);
ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
ma_case1 .setBounds(750, 120, 200, 200);



int victoire = 0;
int a = 0;
int w = 0;


while(a<=8 && w<taille_chaine){
String lettre = readString("choisissez une lettre").toUpperCase();
int place=chaine1.indexOf(lettre);
//remettre victoire à 0,
victoire = 0;
for(int x=0;x<taille_chaine;x++){
if(equal(lettre,chaine[x])){
victoire++;
w++;
}
}
if(victoire==0){
a++;
}
while(place!=-1){

chaine2=chaine2.substring(0,place)+lettre+chaine2.substring(place+1);
place=chaine1.indexOf(lettre,place+1);
ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
ma_case1 .setBounds(750, 120, 200, 200);
}
while(place!=-1){

chaine2=chaine2.substring(0,place)+lettre+chaine2.substring(place+1);
place=chaine1.indexOf(lettre,place+1);
ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
ma_case1 .setBounds(750, 120, 200, 200);
}
int nombre_de_tirets_restant=chaine2.indexOf("-");
while(nombre_de_tirets_restant!=-1){
if(nombre_de_tirets_restant!=-1){
String lettre2=readString("choisissez encore une lettre").toUpperCase();
int place2=chaine1.indexOf(lettre2);
while (place2!=-1){
chaine2=chaine2.substring(0,place2)+lettre2+chaine2.substring(place2+1);
place2=chaine1.indexOf(lettre2,place2+1);
}
ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
ma_case1 .setBounds(750, 120, 200, 200);
}



}if(a==0){
pane.add(ma_case2);
ma_case2.setIcon(image_0);
ma_case2 .setBounds(40, 40, 700, 827);

}if(a==1){
pane.add(ma_case2);
ma_case2.setIcon(image_1);
ma_case2 .setBounds(40, 40, 700, 827);

}if(a==2){
pane.add(ma_case2);
ma_case2.setIcon(image_2);
ma_case2 .setBounds(40, 40, 700, 827);

}if(a==3){
pane.add(ma_case2);
ma_case2.setIcon(image_3);
ma_case2 .setBounds(40, 40, 700, 827);

}if(a==4){
pane.add(ma_case2);
ma_case2.setIcon(image_4);
ma_case2 .setBounds(40, 40, 700, 827);

}if(a==5){
pane.add(ma_case2);
ma_case2.setIcon(image_5);
ma_case2 .setBounds(40, 40, 700, 827);

}if(a==6){
pane.add(ma_case2);
ma_case2.setIcon(image_6);
ma_case2 .setBounds(40, 40, 700, 827);

}if(a==7){
pane.add(ma_case2);
ma_case2.setIcon(image_7);
ma_case2 .setBounds(40, 40, 700, 827);

}if(a==8){
pane.add(ma_case2);
ma_case2.setIcon(image_8);
ma_case2 .setBounds(40, 40, 700, 827);
sleep(2000);
pane.removeAll();
pane.add(ma_case1);
ma_case1.setText("<html><h1><font color=red>vous avez perdu! Le mot \u00e9tait"+chaine1+"! Relanc\u00e9 le programme pour réessayer.</font></h1></html>");
ma_case1 .setBounds(0, 0, 1000, 1000);

}else{
pane.add(ma_case1);
ma_case1.setText("<html><h1><font color=blue>vous avez gagn\u00e9, relanc\u00e9 le programme pour rejouer</font></h1></html>");
ma_case1 .setBounds(0, 0, 1000, 1000);
}

}

}



Et maintenant nouveau problème: il me demande mes lettre et il ne veut pas changé les images quand les lettres correspondent pas ET il ne met plus mon magnifique message "vous avez gagné" T_T.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 nov. 2015 à 18:33
Pour l'instant ton code est trop brouillon pour pouvoir commencer une analyse à la recherche du problème, il faudrait que tu fasses une première étape de nettoyage de ton code, en particulier dans le renommage des variables pour savoir ce qu'elles font, et que tu postes ton code modifié, en l'état moi je ne vais rien faire de plus...
0
madjulio Messages postés 9 Date d'inscription dimanche 15 novembre 2015 Statut Membre Dernière intervention 9 janvier 2016
Modifié par KX le 15/11/2015 à 19:37
bon j'ai renommé quelques variable et voici le code :

import javax.swing.*;

Icon image_0= new ImageIcon("pendu_1.png");
Icon image_1= new ImageIcon("pendu_2.png");
Icon image_2= new ImageIcon("pendu_2'.png");
Icon image_3= new ImageIcon("pendu_3.png");
Icon image_4= new ImageIcon("pendu_3'.png");
Icon image_5= new ImageIcon("pendu_4.png");
Icon image_6= new ImageIcon("pendu_4'.png");
Icon image_7= new ImageIcon("pendu_5.png");
Icon image_8= new ImageIcon("pendu_5'.png");

JLabel ma_case2=new JLabel (image_0);
JLabel ma_case1=new JLabel ();

void main(){

JLayeredPane pane = getPane();
pane.removeAll();

                String [] chaine = {"GOTY","TRIPLEA","ACTIPOGNON","UBIBUG","KOJIMA","RAGEQUITE","ROULETTE"};
                int X=random(0,4);
                String chaine1=chaine[X];

                int taille_de_la_chaine_de_caractere =chaine1.length();
                String chaine2 =("");

pane.add(ma_case2);
ma_case2.setIcon(image_0);
ma_case2 .setBounds(40, 40, 700, 827);
 
 for(int n=0;n<taille_de_la_chaine_de_caractere;n++){
  chaine2 = chaine2+("-");
  chaine1=chaine1.substring(0,taille_de_la_chaine_de_caractere);
 }

pane.add(ma_case1);
ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
ma_case1 .setBounds(750, 120, 200, 200);
 
                

int victoire = 0; 
// victoire serv de code pour designer un faute
int nombre_de_fautes = 0; 


while(nombre_de_fautes<=8){ 
String lettre = readString("choisissez une lettre").toUpperCase(); 
int place=chaine1.indexOf(lettre);
victoire = 0; 
for(int x=0;x<taille_de_la_chaine_de_caractere;x++){ 
if(equal(lettre,chaine[x])){ 
victoire++;
} 
}
if(victoire==0){ 
nombre_de_fautes++;  
}
                 while(place!=-1){
                
                 chaine2=chaine2.substring(0,place)+lettre+chaine2.substring(place+1);
                 place=chaine1.indexOf(lettre,place+1);
                 ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
                 ma_case1 .setBounds(750, 120, 200, 200);
                 }
                 while(place!=-1){
                
                 chaine2=chaine2.substring(0,place)+lettre+chaine2.substring(place+1);
                 place=chaine1.indexOf(lettre,place+1);
                 ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
                 ma_case1 .setBounds(750, 120, 200, 200);
                 }
                  int nombre_de_tirets_restant=chaine2.indexOf("-");
                 while(nombre_de_tirets_restant!=-1){
             if(nombre_de_tirets_restant!=-1){
         String lettre2=readString("choisissez encore une lettre").toUpperCase();
             int place2=chaine1.indexOf(lettre2);
              while (place2!=-1){
                 chaine2=chaine2.substring(0,place2)+lettre2+chaine2.substring(place2+1);
                  place2=chaine1.indexOf(lettre2,place2+1);
                 }
                  ma_case1.setText("<html><h1><font color=blue>"+chaine2+"</font></h1></html>");
                  ma_case1 .setBounds(750, 120, 200, 200);
                 }
                 
                  

}if(nombre_de_fautes==0){
pane.add(ma_case2);
ma_case2.setIcon(image_0);
ma_case2 .setBounds(40, 40, 700, 827);

}if(nombre_de_fautes==1){
pane.add(ma_case2);
ma_case2.setIcon(image_1);
ma_case2 .setBounds(40, 40, 700, 827);

}if(nombre_de_fautes==2){
pane.add(ma_case2);
ma_case2.setIcon(image_2);
ma_case2 .setBounds(40, 40, 700, 827);

}if(nombre_de_fautes==3){
pane.add(ma_case2);
ma_case2.setIcon(image_3);
ma_case2 .setBounds(40, 40, 700, 827);

}if(nombre_de_fautes==4){
pane.add(ma_case2);
ma_case2.setIcon(image_4);
ma_case2 .setBounds(40, 40, 700, 827);

}if(nombre_de_fautes==5){
pane.add(ma_case2);
ma_case2.setIcon(image_5);
ma_case2 .setBounds(40, 40, 700, 827);

}if(nombre_de_fautes==6){
pane.add(ma_case2);
ma_case2.setIcon(image_6);
ma_case2 .setBounds(40, 40, 700, 827);

}if(nombre_de_fautes==7){
pane.add(ma_case2);
ma_case2.setIcon(image_7);
ma_case2 .setBounds(40, 40, 700, 827);

}if(nombre_de_fautes==8){ 
pane.add(ma_case2);
ma_case2.setIcon(image_8);
ma_case2 .setBounds(40, 40, 700, 827);
sleep(2000);
pane.removeAll();
pane.add(ma_case1);
ma_case1.setText("<html><h1><font color=red>vous avez perdu! Le mot \u00e9tait"+chaine1+"! Relanc\u00e9 le programme pour réessayer.</font></h1></html>");
ma_case1 .setBounds(0, 0, 1000, 1000);

}else{
                 pane.add(ma_case1);
                 ma_case1.setText("<html><h1><font color=blue>vous avez gagn\u00e9, relanc\u00e9 le programme pour rejouer</font></h1></html>");
                 ma_case1 .setBounds(0, 0, 1000, 1000);
} 

}

}
0