import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * La classe Grid représente une grille de Sudoku composée de cellules. */ public class Grid { private Cell[][] cells; /** * Constructeur par défaut qui initialise une grille de Sudoku vide. */ public Grid() { cells = new Cell[9][9]; for (int ligne = 0; ligne < 9; ligne++) { for (int column = 0; column < 9; column++) { cells[ligne][column] = new Cell(); } } } /** * Charge une grille de Sudoku à partir d'un fichier. * @param fileName Le nom du fichier à partir duquel charger la grille avec extension ".gri". */ public void loadGridFromFile(String fileName) { try (DataInputStream input = new DataInputStream(new FileInputStream(fileName))) { for (int ligne = 0; ligne < 9; ligne++) { String line = String.valueOf(input.readInt()); int length = line.length(); if (length < 9) { line = "000000000".substring(length) + line; // Ajoute les zéros au début si nécessaire } for (int column = 0; column < 9; column++) { char number = line.charAt(column); int value = Character.getNumericValue(number); cells[ligne][column].setValue(value); } } System.out.println("Success"); } catch (IOException e) { System.err.println("Error: " + e.getMessage()); } } /** * Sauvegarde la grille de Sudoku dans un fichier ".gri". * @param fileName Le nom du fichier dans lequel sauvegarder la grille. */ public void saveGridToFile(String fileName) { try (DataOutputStream output = new DataOutputStream(new FileOutputStream(fileName))) { for (int ligne = 0; ligne < 9; ligne++) { StringBuilder line = new StringBuilder(); for (int column = 0; column < 9; column++) { 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) { System.err.println("Erreur lors de la sauvegarde de la grille: " + e.getMessage()); } } /** * Obtient la cellule à la position spécifiée dans la grille. * @param ligne L'indice de ligne de la cellule. * @param col L'indice de colonne de la cellule. * @return La cellule à la position spécifiée. */ public Cell getCell(int ligne, int col) { return cells[ligne][col]; } /** * Copie le contenu d'une autre grille dans cette grille. * @param second_grid La grille à partir de laquelle copier les valeurs. */ public void copyFrom(Grid second_grid) { for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { this.cells[row][col].setValue(second_grid.cells[row][col].getValue()); } } } /** * 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; } /** * Affiche la grille de Sudoku dans la console. */ public void printGrid() { for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { System.out.print(cells[row][col].getValue() + " "); } System.out.println(); } } }