Probleme recursive démineur java
entwan
-
entwan -
entwan -
Bonjour,
Mon problème est le suivant:
je créer un démineur en java et j'aimerais que lorsqu’on clique sur une case vide une fonction récursive permet de vérifier les cases alentour et si elles sont des cases aussi vides qu'elles se découvrent aussi.
j'avais donc ceci:
Donc la Méthode NbmethodeBetween renvoi le nombre de bombe autour ainsi si il n'y a pas de bomb la case prends la valeur de Cell.Empty et j'aimerais que de se fait elle vérifie toutes les cases autour d'elle mais il ya un problème la fonction récursive boucle.
Par exemple si a un endroit il ya une case vide et a cotes aussi alors les deux vont s'appeler en même temps comment la faire s’arrêter.
Merci :)
Mon problème est le suivant:
je créer un démineur en java et j'aimerais que lorsqu’on clique sur une case vide une fonction récursive permet de vérifier les cases alentour et si elles sont des cases aussi vides qu'elles se découvrent aussi.
j'avais donc ceci:
public void DevoileCase( int lignes, int colonnes) { if (lignes >= 0 && lignes <= 12 && colonnes >= 0 && colonnes <= 6 && this.ChoseCell(lignes, colonnes) == false) { int NbMA = NbMinesBetween(lignes, colonnes); if (NbMA == 0) this.map[lignes][colonnes] = Cell.EMPTYCELL; if (NbMA != 0) this.map[lignes][colonnes] = Cell.NUMBEREDCELL; ++nbCaseVue; if (NbMA == 0) // partie récursive { try { DevoileCase(lignes + 1, colonnes); } catch (java.lang.StackOverflowError e) { System.out.println("marche pas "); } try { DevoileCase(lignes + 1, colonnes + 1); } catch (java.lang.StackOverflowError e) { System.out.println("marche pas "); } try { DevoileCase(lignes, colonnes + 1); } catch (java.lang.StackOverflowError e) { System.out.println("marche pas "); } try { DevoileCase(lignes - 1, colonnes); } catch (java.lang.StackOverflowError e) { System.out.println("marche pas "); } try { DevoileCase(lignes - 1, colonnes - 1); } catch (java.lang.StackOverflowError e) { System.out.println("marche pas "); } try { DevoileCase(lignes, colonnes - 1); } catch (java.lang.StackOverflowError e) { System.out.println("marche pas "); } try { DevoileCase(lignes - 1, colonnes + 1); } catch (java.lang.StackOverflowError e) { System.out.println("marche pas "); } try { DevoileCase(lignes + 1, colonnes - 1); } catch (java.lang.StackOverflowError e) { System.out.println("marche pas "); } } } }
Donc la Méthode NbmethodeBetween renvoi le nombre de bombe autour ainsi si il n'y a pas de bomb la case prends la valeur de Cell.Empty et j'aimerais que de se fait elle vérifie toutes les cases autour d'elle mais il ya un problème la fonction récursive boucle.
Par exemple si a un endroit il ya une case vide et a cotes aussi alors les deux vont s'appeler en même temps comment la faire s’arrêter.
Merci :)
Configuration: Windows / Firefox 66.0
A voir également:
- Probleme recursive démineur java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
1 réponse
Bonjour,
Que fait this.ChoseCell(lignes, colonnes) ?
A priori, je vois un écueil, mais peut-être est-il couvert par cette fonction : tu ne vérifies pas que la case en cours n'a pas déjà été traitée. Si elle est dévoilée, il ne faut rien faire. Sinon la fonction va passer systématiquement sur les mêmes cases...
Xavier
Que fait this.ChoseCell(lignes, colonnes) ?
A priori, je vois un écueil, mais peut-être est-il couvert par cette fonction : tu ne vérifies pas que la case en cours n'a pas déjà été traitée. Si elle est dévoilée, il ne faut rien faire. Sinon la fonction va passer systématiquement sur les mêmes cases...
Xavier
Oui j'y ai pensé mais je ne trouve pas comment faire j'ai essayé de faire
public void DevoileCase(final int lignes, final int colonnes) {
if (lignes >= 0 && lignes < nbLines && colonnes >= 0 && colonnes < nbRow && this.map[lignes][colonnes] == Cell.HIDDENCELL) {
soit de rajouter la vérification sur this.map[lignes][colonnes] == Cell.HIDDENCELL
mais ça ne marche pas j'ai aussi pensé à stocker les coordonnes des cases déjà dévoiles dans un tableau et de vérifier qu'il ne soit pas dans le tableau.