Bonjour! Je dois créer un sudoku dans le cadre d'un projet pour mon DUT informatique. J'ai déjà quelques peu avancé mais je suis bloqué. Le professeur nous a donné quelques methodes deja implémentées mais je ne comprend pas pourquoi je n'arrive pas à générer une grille valide (grille préremplie avec des chiffres) quand je clique sur le bouton "nouveau" voici mon 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 
 
public boolean remplirAleatoireValide(Random aleatoire, ListIterator<CaseSudoku> iterateur) {
		boolean res = false;
		if (iterateur == null)
			iterateur = lesCases.listIterator(); // par défaut on travail avec
													// l'ensemble des cases et
													// l'ordre correspondant
		if (!iterateur.hasNext())
			res = true;
		else {
			CaseSudoku c = iterateur.next();
			if (c.fixee())
				res = this.remplirAleatoireValide(aleatoire, iterateur);
			else {
				LinkedList<Integer> lesPossibles = c.getPossibles()
						.listeAleatoire(aleatoire);
				while (!lesPossibles.isEmpty()) {
					c.jouerLaValeur(lesPossibles.removeFirst());
					res = remplirAleatoireValide(aleatoire, iterateur);
					if (res)
						break;
					c.annulerJoue();
				}
			}
			if (!res)
				iterateur.previous();
		}
		return res;
	}
 
 
public int creationDuneGrilleDeJeu(int minVide, int maxVide){
		grille.vider();
		grille.remplirAleatoireValide(this.aleatoire, null);
		getGrille().Export(new PrintWriter(System.out,true),3);
		grille.initPossibles();
		ListeCases listeCases = (ListeCases)this.grille.getLesCases().clone();
		listeCases.setType(TypeListeCases.NonOrdonnee);
		Collections.shuffle(listeCases);
		return creationDuneGrilleDeJeuRecursive(minVide,maxVide, 0,listeCases);
}
 
public int creationDuneGrilleDeJeuRecursive(int minVide, int maxVide, int actuel, ListeCases listeCases){
		CaseSudoku c = listeCases.pop();
		Integer val=c.getValeur();
		c.annulerJoue();
		int nbrVide=0;
		int nbrRemplir = this.nombreDeFaconDeRemplirLaGrille(2);
		if (nbrRemplir==1){
			if (actuel+1<maxVide) nbrVide=creationDuneGrilleDeJeuRecursive(minVide, maxVide, actuel+1, listeCases);
			else nbrVide=actuel+1;
		}
		else {
			c.jouerLaValeur(val);
			if (actuel<minVide) nbrVide=creationDuneGrilleDeJeuRecursive(minVide, maxVide, actuel, listeCases);
			else nbrVide=actuel;
		}
		listeCases.push(c);
		return nbrVide;
	}
 
public void genererGrilleValide() {
		// Generer la grille, ne fonctionne pas...
		jeu.creationDuneGrilleDeJeu(35, 45);		
}
 
public void initPossibles() {
		Point2D dim = getDimension();
		int n = dim.getY(), m = dim.getX(), i, j;
		for (i = 0; i < n; i++) {
			for (j = 0; j < m; j++) {
				getCase(i, j).initPossible();
			}
		}
}
 
public void gereEvenement(String nomComposant,int typeEvenement,String valeur,int xSouris,int ySouris) {
if (nomComposant.equals("Nouveau")) {
			if(typeEvenement == Constantes.CLICK_BOUTON){
				controleur.genererGrilleValide();
			}
		}
}