Bonsoir,
Je cherche à améliorer le code de mon application afin de le rendre propre et clair. L'objectif final étant de coder un jeu de memory.
Ci-dessous une partie de code commenté :
Pour ceux que ça intéresse, voici la boucle qui affiche les deux ArrayList :
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 // nombreImageTotal, est une variable qui dépend d'une autre classe, qui varie entre min16 et de environs 20 (cela dépend de moi et est codé en dur. private static JLabel[][] tabTotal = new JLabel[2][nombreImageTotal * 2]; //le *2 sert parce que je souhaite avoir deux fois la même image. public static ArrayList<JLabel> list = new ArrayList<>(); public static ArrayList<JLabel> listDos = new ArrayList<>(); //ici la fonction qui servira à créer des labels. Je la poste en premier pour plus de clarté. public static JLabel createJLabel (String i){ JLabel jl = new JLabel(new ImageIcon(CreationVariable.class.getResource("/image/" + getTheme() + i + ".png"))); return jl; } //Création de la première partie du tableau, car je n'ai pas trouvé le moyen de le faire en une seule fois... // aussi un point important, je pose un "setText" qui est vital pour la suite. for(int i = 0 ; i < 2 ; i++){ for ( int j = 0 ; j < nombreImageTotal; j++ ){ if ( i == 0 ) { tabTotal[i][j] = createJLabel( Integer.toString(j+1) ); tabTotal[i][j].setText(j+1); }else{ tabTotal[i][j] = createJLabel( "dos" ); tabTotal[i][j].setText((j+1); }} } //dans cette deuxième partie je n'ai pas trouvé mieux que de refaire une boucle afin de simplement "doubler" le tableau for(int i = 0 ; i < 2 ; i++){ for ( int j = nombreImageTotal ; j < nombreImageTotal * 2 ; j++ ){ if ( i == 0 ) { tabTotal[i][j] = createJLabel( Integer.toString(j+1-nombreImageTotal )); tabTotal[i][j].setText(j+1- nombreImageTotal); }else{ tabTotal[i][j] = createJLabel( "dos" ); tabTotal[i][j].setText(j+1- nombreImageTotal); }} } // Ces deux listes sont clear() dans une autre partie du programme // elles me servent par la suite à insérer ces jlabel dans un panel dans une boucle. for(int i = 0; i < nombreImageTotal * 2 ; i++){ list.add(tabTotal[0][i]); // [0][i] sert a récupérer la liste d'image. listDos.add(tabTotal[1][i]);} // [1][i] sert pour récupérer une image de carte retourné avec le fameux 'setText" identique à la ligne de dessus //NiveauDifficultee est fixé par un radio bouton dans un menubar et en cas de modification en cour de partie, relance "l'initialisation" du jeux. int b = (list.size() / 2) - (NiveauDifficultee / 2); int d = nombreImageTotal; //ici je tire des cartes aléatoirement que j'efface de mes listes, mais comme j'ai deux fois les mêmes cartes je dois effacer deux fois. for(int i = 0 ; i < b ; i++) { int a = (int) (Math.random() * (list.size() / 2) ); list.remove(a + d); list.remove(a); listDos.remove(a + d); listDos.remove(a); d--; } // j'ai pompé ce code sur le net, mais je n'ai pas compris comment il fonctionnait // ce que je sais, c'est qu'il permet de mélanger plusieurs ArrayList en même temps sans permutation long seed = System.nanoTime(); Collections.shuffle(list, new Random(seed)); Collections.shuffle(listDos, new Random(seed));
Ainsi que le Listener.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 for(int i = 0; i < list.size() ; i++){ listDos.get(i).setBounds(tabLabX[i], tabLabY[i], 150, 200); listDos.get(i).setName("" + (i)); list.get(i).setBounds(tabLabX[i], tabLabY[i], 150, 200); list.get(i).setName("" + (i)); list.get(i).setVisible(false); listDos.get(i).addMouseListener(new ListenerPerso()); getPanJeux().add(listDos.get(i)); getPanJeux().add(list.get(i)); }
Il est important de noter que j'en suis seulement à la version "preview" surtout dans le code du listener et que la question principale se trouve dans le premier "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
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 static Boolean clique = false; static public String textClique; static public String nomClique; static public String ancienTextClique; static public String ancienNomClique; static public int NombreCarteTrouver; int NiveauDifficultee = CreationVariable.getNiveauDifficultee(); ArrayList<JLabel> list = CreationVariable.getList(); ArrayList<JLabel> listDos = CreationVariable.getListDos(); public void mouseClicked(MouseEvent me) { textClique = ((JLabel) me.getSource()).getText(); nomClique = ((JLabel) me.getSource()).getName(); // System.out.println(textClique); // System.out.println(nomClique); listDos.get(Integer.parseInt(nomClique)).setVisible(false); list.get(Integer.parseInt(nomClique)).setVisible(true); if ( clique == true) { try { Thread.sleep(100); } catch (InterruptedException e1) { //cette tempo est juste un test car il y a des fois certains bugs. // TODO Auto-generated catch block e1.printStackTrace(); } clique = false; if ( textClique.equals(ancienTextClique) == false ) { String az = ancienNomClique; String aze = nomClique; new TimerEDT (900, e-> (list.get(Integer.parseInt(aze)).setVisible(false))); new TimerEDT (900, e-> (list.get(Integer.parseInt(az)).setVisible(false))); new TimerEDT (900, e-> (listDos.get(Integer.parseInt(aze)).setVisible(true))); new TimerEDT (900, e-> (listDos.get(Integer.parseInt(az)).setVisible(true))); }else { NombreCarteTrouver = NombreCarteTrouver +2; if (NombreCarteTrouver == NiveauDifficultee) { System.out.println("Gagner"); Fenetre.getPanJeux().removeAll(); JLabel vic = new JLabel(new ImageIcon(CreationVariable.class.getResource("/image/victoire.png"))); vic.setBounds(10, 10, 429, 415); vic.setVisible(true); Fenetre.getPanJeux().add(vic); } } }else { clique = true; } ancienTextClique = textClique; ancienNomClique = nomClique; // Thread t = new ThreadTest(); // t.start(); Fenetre.getPanJeux().repaint(); }
Quelqu'un saurait-il m'indiquer comment améliorer celui-ci ?
Merci d'avance pour votre aide.
Partager