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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
| /*****************************************************************************/
/* Classe abstraite Sudoku */
/*****************************************************************************/
// La classe Sudoku est la classe mère qui contient les attributs communs à toutes les classes filles (Sudoku9x9 par exemple)
// Cette technique d'héritage permet d'instancier la classe fille Sudoku9x9 plutôt que la classe mère.
import java.util.ArrayList;
import java.util.BitSet; // Importation package utilitaire permettant de créer un vecteurs de bits
public abstract class Sudoku { // Création de la classe Sudoku qui n'est pas instanciée.
private int[][] tableaufinal; // Matrice de nombre entier qui représente la grille finale de Sudoku
private int [][] grille; // Matrice de nombre entier qui représente la grille de Sudoku
private int complexite = 0; // Variable pour enregistrer le niveau de difficulte 1 à 3
private int placements = 0; // Nombre de chiffre restant à placer dans la grille
private int n; // Représente le nombre d'éléments dans le Sudoku
private String nom; // Représente le nom du joueur
private List<Placement> placemt = new ArrayList<Placement> (); // Création d'un nouvel objet dynamique ArrayList "placement" vide
// Constructeur de Sudoku - Définition des attributs de la classe Sudoku
public Sudoku (String nom, int n, int placements, int complexite) {
this.n = n;
grille = new int[n][n]; // La grille est composée de n * n carrés
}
// Fonction d'initialisation des valeurs de la grille et des placements
public void initialisation () {
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
grille[i][j] = 0;
}
}
// complexite = 0; Note au lecteur : je préfère de pas inclure l'initialisation de la complexité à cet endroit et ne pas lui donner une valeur
// par défaut de zéro. Voir méthode propre à l'initialisation de la complexité.
placement = 0;
}
// Fonction d'initialisation du niveau de complexité
public void initialisation_complexite (int complexite) {
int nombreDeCasesVides = fonctionSpecialeADeterminer(complexite); // On détermine un nombre de case initialement vide en fonction de la complexité
copier tableauFinal_vers_grille; // Copie case par case
for(int i=0; i<nombreDeCasesVides; i++) {
// Tirer une case au hasard non vide
do {
int tirer_un_x_au_hasard;
int tirer_un_y_au_hasard;
} while ( grille[x][y] !=0 );
grille[x][y]=0; // Vider la case
}
}
// Retour du niveau de complexité
public int getComplexite() {
return complexite;
}
// Retour de la grille
public int[][] getGrille() {
return grille;
}
// Définition de "une unedonnee" à la ligne i et colonne j de la grille
public void setGrille(int i, int j, int unedonnee) {
this.grille[i][j] = unedonnee;
}
// Retour de la dimension de la grille
public int getN () {
return n;
}
// Définition de la dimension de la grille
public void setN(int n) {
this.n = n;
}
// Retour de la valeur lesplacements
public int getPlacements() {
return placements;
}
// Définit la valeur lesplacements
public void setPlacements(int placements) {
this.placements = placements;
}
// Définit le tableau final
public void setTableaufinal(int[][] tableaufinal) {
this.tableaufinal = tableaufinal;
}
// Définit la grille
public void setGrille(int[][] grille) {
this.grille = grille;
}
// Méthode d'impression de la grille originale
public void imprimerGrilleOriginale() {
System.out.println("imprime");
}
public void imprimerComplexite() {
System.out.println("Degre de complexite : " + complexite);
}
// Retourne le tableau final
public int[][] getTableaufinal() {
return tableaufinal;
}
public void setComplexite(int complexite) {
this.complexite = complexite;
}
}
/*************************************************************************************************/
/* Classe Placement qui permet de connaître le nombre de chiffre restant à placer dans la grille */
/*************************************************************************************************/
public class Placement {
private int value = 0;
private int x = 0;
private int y = 0;
private int nouvelleValeur = 0;
private int ancienneValeur = 0;
public Placement(int x, int y, int ancienneValeur,int nouvelleValeur) {
this.x = x;
this.y = y;
this.ancienneValeur = ancienneValeur;
this.nouvelleValeur = nouvelleValeur;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
public int getancienneValeur() {
return this.ancienneValeur;
}
public int getnouvelleValeur() {
return this.nouvelleValeur;
}
}
/*************************************************************************************************/
/* Classe creerPlacement avec une ArrayList */
/*************************************************************************************************/
private List <Placement> placements = new ArrayList<>();
private int nbPlacements = 0;
public void creerPlacement(int x, int y, int valeur){
Placement deplocal=new Placement(x,y,this.grille[x][y],valeur);
if ( this.placements.size()<=nbPlacements ) {
this.placements.add(nbPlacements++, deplocal);
}
else {
this.placements.set(nbPlacements++, deplocal);
}
c = new Case(); // Appel d'une méthode de la Classe Case dont le but de de stocker le contenu d'une case
}
/*************************************************************************************************/
/* Classe annulerPlacement */
/*************************************************************************************************/
public void annulerPlacement() {
if ( nbPlacements>0 ) { // s'il y a des placements
Placement deplocal = placements.set(--nbPlacements,null);
int x = deplocal.getX();
int y = deplocal.getY();
int ancienneValeur = deplocal.getancienneValeur();
this.grille[x][y]=ancienneValeur;
}
} |
Partager