2024-04-30 12:20:16 +02:00
|
|
|
import java.io.DataInputStream;
|
2024-05-04 16:11:35 +02:00
|
|
|
import java.io.DataOutputStream;
|
2024-04-30 12:20:16 +02:00
|
|
|
import java.io.FileInputStream;
|
2024-05-04 16:11:35 +02:00
|
|
|
import java.io.FileOutputStream;
|
2024-04-30 12:20:16 +02:00
|
|
|
import java.io.IOException;
|
|
|
|
|
2024-05-04 17:56:30 +02:00
|
|
|
/**
|
|
|
|
* La classe Grid représente une grille de Sudoku composée de cellules.
|
|
|
|
*/
|
2024-04-28 01:40:14 +02:00
|
|
|
public class Grid {
|
2024-05-04 16:11:35 +02:00
|
|
|
private Cell[][] cells;
|
2024-04-28 01:40:14 +02:00
|
|
|
|
2024-05-04 17:56:30 +02:00
|
|
|
/**
|
|
|
|
* Constructeur par défaut qui initialise une grille de Sudoku vide.
|
|
|
|
*/
|
2024-04-28 01:40:14 +02:00
|
|
|
public Grid() {
|
2024-05-05 15:50:16 +02:00
|
|
|
cells = new Cell[9][9];
|
|
|
|
for (int ligne = 0; ligne < 9; ligne++) {
|
|
|
|
for (int column = 0; column < 9; column++) {
|
2024-05-04 16:11:35 +02:00
|
|
|
cells[ligne][column] = new Cell();
|
2024-04-28 01:40:14 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-05-04 17:56:30 +02:00
|
|
|
/**
|
|
|
|
* Charge une grille de Sudoku à partir d'un fichier.
|
|
|
|
* @param fileName Le nom du fichier à partir duquel charger la grille avec extension ".gri".
|
|
|
|
*/
|
2024-04-30 12:20:16 +02:00
|
|
|
public void loadGridFromFile(String fileName) {
|
|
|
|
try (DataInputStream input = new DataInputStream(new FileInputStream(fileName))) {
|
2024-05-05 15:50:16 +02:00
|
|
|
for (int ligne = 0; ligne < 9; ligne++) {
|
2024-04-30 12:20:16 +02:00
|
|
|
String line = String.valueOf(input.readInt());
|
2024-04-30 22:50:48 +02:00
|
|
|
int length = line.length();
|
2024-05-05 15:50:16 +02:00
|
|
|
if (length < 9) {
|
2024-04-30 22:50:48 +02:00
|
|
|
line = "000000000".substring(length) + line; // Ajoute les zéros au début si nécessaire
|
|
|
|
}
|
2024-05-05 15:50:16 +02:00
|
|
|
for (int column = 0; column < 9; column++) {
|
2024-05-04 14:59:38 +02:00
|
|
|
char number = line.charAt(column);
|
|
|
|
int value = Character.getNumericValue(number);
|
2024-05-04 16:11:35 +02:00
|
|
|
cells[ligne][column].setValue(value);
|
2024-04-30 12:20:16 +02:00
|
|
|
}
|
2024-04-28 01:40:14 +02:00
|
|
|
}
|
2024-04-30 12:20:16 +02:00
|
|
|
System.out.println("Success");
|
|
|
|
} catch (IOException e) {
|
2024-05-04 17:56:30 +02:00
|
|
|
System.err.println("Error: " + e.getMessage());
|
2024-04-28 01:40:14 +02:00
|
|
|
}
|
|
|
|
}
|
2024-05-05 15:50:16 +02:00
|
|
|
|
2024-05-04 17:56:30 +02:00
|
|
|
/**
|
|
|
|
* Sauvegarde la grille de Sudoku dans un fichier ".gri".
|
|
|
|
* @param fileName Le nom du fichier dans lequel sauvegarder la grille.
|
|
|
|
*/
|
2024-05-04 16:11:35 +02:00
|
|
|
public void saveGridToFile(String fileName) {
|
|
|
|
try (DataOutputStream output = new DataOutputStream(new FileOutputStream(fileName))) {
|
2024-05-05 15:50:16 +02:00
|
|
|
for (int ligne = 0; ligne < 9; ligne++) {
|
2024-05-04 16:11:35 +02:00
|
|
|
StringBuilder line = new StringBuilder();
|
2024-05-05 15:50:16 +02:00
|
|
|
for (int column = 0; column < 9; column++) {
|
2024-05-04 16:11:35 +02:00
|
|
|
int value = cells[ligne][column].getValue();
|
|
|
|
line.append(value);
|
|
|
|
}
|
|
|
|
output.writeInt(Integer.parseInt(line.toString()));
|
|
|
|
}
|
|
|
|
System.out.println("Grille sauvegardée avec succès dans " + fileName);
|
|
|
|
} catch (IOException e) {
|
2024-05-04 17:56:30 +02:00
|
|
|
System.err.println("Erreur lors de la sauvegarde de la grille: " + e.getMessage());
|
2024-05-04 16:11:35 +02:00
|
|
|
}
|
|
|
|
}
|
2024-04-28 01:40:14 +02:00
|
|
|
|
2024-05-04 17:56:30 +02:00
|
|
|
/**
|
|
|
|
* Obtient la cellule à la position spécifiée dans la grille.
|
|
|
|
* @param ligne L'indice de ligne de la cellule.
|
2024-05-05 15:50:16 +02:00
|
|
|
* @param col L'indice de colonne de la cellule.
|
2024-05-04 17:56:30 +02:00
|
|
|
* @return La cellule à la position spécifiée.
|
|
|
|
*/
|
2024-05-04 00:13:44 +02:00
|
|
|
public Cell getCell(int ligne, int col) {
|
2024-05-04 16:11:35 +02:00
|
|
|
return cells[ligne][col];
|
2024-04-30 12:20:16 +02:00
|
|
|
}
|
2024-04-28 01:40:14 +02:00
|
|
|
|
2024-05-04 17:56:30 +02:00
|
|
|
/**
|
|
|
|
* Copie le contenu d'une autre grille dans cette grille.
|
|
|
|
* @param second_grid La grille à partir de laquelle copier les valeurs.
|
|
|
|
*/
|
2024-05-04 14:59:38 +02:00
|
|
|
public void copyFrom(Grid second_grid) {
|
2024-05-05 15:50:16 +02:00
|
|
|
for (int row = 0; row < 9; row++) {
|
|
|
|
for (int col = 0; col < 9; col++) {
|
2024-05-04 16:11:35 +02:00
|
|
|
this.cells[row][col].setValue(second_grid.cells[row][col].getValue());
|
2024-05-04 00:13:44 +02:00
|
|
|
}
|
|
|
|
}
|
2024-04-28 01:40:14 +02:00
|
|
|
}
|
|
|
|
|
2024-05-06 16:31:58 +02:00
|
|
|
/**
|
|
|
|
* Vérifie si la grille est pleine (toutes les cellules sont remplies).
|
|
|
|
* @return True si la grille est pleine, False sinon.
|
|
|
|
*/
|
|
|
|
public boolean isFull() {
|
|
|
|
for (int row = 0; row < 9; row++) {
|
|
|
|
for (int col = 0; col < 9; col++) {
|
|
|
|
if (getCell(row, col).getValue() == 0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-05-04 17:56:30 +02:00
|
|
|
/**
|
|
|
|
* Affiche la grille de Sudoku dans la console.
|
|
|
|
*/
|
2024-05-04 00:13:44 +02:00
|
|
|
public void printGrid() {
|
2024-05-05 15:50:16 +02:00
|
|
|
for (int row = 0; row < 9; row++) {
|
|
|
|
for (int col = 0; col < 9; col++) {
|
2024-05-04 16:11:35 +02:00
|
|
|
System.out.print(cells[row][col].getValue() + " ");
|
2024-04-30 12:20:16 +02:00
|
|
|
}
|
2024-05-04 00:13:44 +02:00
|
|
|
System.out.println();
|
2024-04-30 12:20:16 +02:00
|
|
|
}
|
|
|
|
}
|
2024-05-04 17:56:30 +02:00
|
|
|
}
|