Bonjour chères amis,
Je me retourne vers ce forum en dernier recours, car après maintes recherches je n'ai pas trouvé de réponse adéquate.
Ma question : je suis entrain de réaliser un projet JAVA, c'est en gros un plateau qui contient des cases remplies aléatoirement, et ce que je veux faire c'est, à chaque fois que je selectionne une case, un arrayliste (tab) doit contenir les cordonnées de toutes les cases voisines et voisines des voisines sans doublons.
C'est ce que j'essaie de faire, mais ma méthode récursive engendre une erreur qui bloque l'execution de mon programme.
Je voudrais qu'on m'aide sur le raisonnement.
Voici les parties interessantes de mon code :
ce code marche pour toute les voisines directes (sans compter les diagonales),
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 //////////////////* donne les coordonnées des voisins de la même couleur *///////////// public void chercheVoisinsCouleur (Case C){ for(int i=C.getLigne()-1; i<=C.getLigne()+1; i++){ for(int j=C.getColonne()-1; j<=C.getColonne()+1; j++){ if (i<plateau.length && j<plateau.length){ if(i<0) i++; if(j<0) j++; if((i+j) %2 == 1){ // test si impaire (pour ne pas inclure les diagonales) if(tab.contains(plateau[i][j])==false){ // saute les cases qu'on a deja testé if (plateau[i][j].equals(C)){ tab.add(plateau[i][j]); cmpt++; } } } } } } } //////////////////////* Methode pour retirer les billes si >=3 *///////////////////// public Case[][] retireBillesCouleur (Case C){ tab = new ArrayList <Case>(); tab.add(C); cmpt++; chercheVoisinsCouleur(C); if (cmpt>2){ for(int i=0; i<cmpt; i++){ plateau[tab.get(i).getLigne()][tab.get(i).getColonne()].setEtat(false); } } return plateau; }
je sait que je dois utiliser une methode recursive (appeler chercheVoisinsCouleur dans chercheVoisinsCouleur) pour avoir les coordonnées des voisins des voisins mais je n'arrive pas à faire le bon raisonnement.
Merci d'avance pour votre aide!
Partager