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();
}
}
} |
Partager