diff --git a/Sudoku.java b/Sudoku.java index ad5828f..6409306 100644 --- a/Sudoku.java +++ b/Sudoku.java @@ -1,28 +1,56 @@ +/** + * La classe Sudoku représente un jeu de Sudoku avec une grille associée. + * Elle fournit des méthodes pour interagir avec la grille, telles que le chargement à partir d'un fichier, + * l'impression de la grille et la vérification de l'état de résolution. + */ public class Sudoku { private Grid grid; private boolean solved; + /** + * Constructeur par défaut. Initialise un Sudoku avec une grille vide et non résolue. + */ public Sudoku() { - this.grid = new Grid(); // Initialiser avec une grille vide + this.grid = new Grid(); this.solved = false; } + /** + * Obtient la grille associée à ce Sudoku. + * @return La grille associée à ce Sudoku. + */ public Grid getGrid() { return grid; } + /** + * Définit une nouvelle grille pour ce Sudoku. + * @param newGrid La nouvelle grille à définir. + */ public void setGrid(Grid newGrid) { this.grid = newGrid; } + /** + * Vérifie si ce Sudoku est résolu. + * @return True si le Sudoku est résolu, False sinon. + */ public boolean isSolved() { return solved; } + /** + * Charge une grille de Sudoku à partir d'un fichier. + * @param fileName Le nom du fichier à charger. + */ public void loadGridFromFile(String fileName) { this.grid.loadGridFromFile(fileName); } + /** + * Imprime la grille de Sudoku sur la sortie standard. + * Chaque ligne de la grille est imprimée sur une ligne distincte. + */ public void printGrid() { for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { @@ -33,4 +61,4 @@ public class Sudoku { } } -} +} \ No newline at end of file diff --git a/SudokuButtonListener.java b/SudokuButtonListener.java index d7e122b..242aa1f 100644 --- a/SudokuButtonListener.java +++ b/SudokuButtonListener.java @@ -3,12 +3,24 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +/** + * La classe SudokuButtonListener écoute les événements des boutons dans une interface utilisateur de Sudoku. + * Lorsqu'un bouton est cliqué, cette classe affiche une boîte de dialogue demandant à l'utilisateur d'entrer un nombre, + * puis met à jour la grille de Sudoku en conséquence. + */ public class SudokuButtonListener implements ActionListener { private int row; private int col; private Sudoku sudoku; private JButton[][] buttons; + /** + * Constructeur de SudokuButtonListener. + * @param row L'indice de ligne du bouton. + * @param col L'indice de colonne du bouton. + * @param sudoku L'instance de Sudoku associée à l'interface utilisateur. + * @param buttons La grille de boutons associée à l'interface utilisateur. + */ public SudokuButtonListener(int row, int col, Sudoku sudoku, JButton[][] buttons) { this.row = row; this.col = col; @@ -16,6 +28,11 @@ public class SudokuButtonListener implements ActionListener { this.buttons = buttons; } + /** + * Méthode invoquée lorsque le bouton associé à ce listener est cliqué. + * Affiche une boîte de dialogue demandant à l'utilisateur d'entrer un nombre, puis met à jour la grille de Sudoku. + * @param e L'événement ActionEvent associé au clic du bouton. + */ @Override public void actionPerformed(ActionEvent e) { String input = JOptionPane.showInputDialog("Entrez un nombre :"); @@ -39,10 +56,23 @@ public class SudokuButtonListener implements ActionListener { } } + /** + * Vérifie si le nombre entré est valide pour la position donnée dans la grille de Sudoku. + * @param num Le nombre entré par l'utilisateur. + * @param row L'indice de ligne de la cellule dans la grille. + * @param col L'indice de colonne de la cellule dans la grille. + * @return True si le nombre est valide pour cette position, False sinon. + */ private boolean isValid(int num, int row, int col) { return isValidRow(num, row) && isValidCol(num, col) && isValidBox(num, row - row % 3, col - col % 3); } + /** + * Vérifie si le nombre est valide dans la ligne donnée de la grille de Sudoku. + * @param num Le nombre entré par l'utilisateur. + * @param row L'indice de ligne de la cellule dans la grille. + * @return True si le nombre est valide dans cette ligne, False sinon. + */ private boolean isValidRow(int num, int row) { for (int i = 0; i < 9; i++) { if (sudoku.getGrid().getCell(row, i).getValue() == num && i != col) { @@ -52,6 +82,12 @@ public class SudokuButtonListener implements ActionListener { return true; } + /** + * Vérifie si le nombre est valide dans la colonne donnée de la grille de Sudoku. + * @param num Le nombre entré par l'utilisateur. + * @param col L'indice de colonne de la cellule dans la grille. + * @return True si le nombre est valide dans cette colonne, False sinon. + */ private boolean isValidCol(int num, int col) { for (int i = 0; i < 9; i++) { if (sudoku.getGrid().getCell(i, col).getValue() == num && i != row) { @@ -61,6 +97,13 @@ public class SudokuButtonListener implements ActionListener { return true; } + /** + * Vérifie si le nombre est valide dans la boîte 3x3 contenant la cellule donnée. + * @param num Le nombre entré par l'utilisateur. + * @param boxStartRow L'indice de ligne du coin supérieur gauche de la boîte. + * @param boxStartCol L'indice de colonne du coin supérieur gauche de la boîte. + * @return True si le nombre est valide dans cette boîte, False sinon. + */ private boolean isValidBox(int num, int boxStartRow, int boxStartCol) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { @@ -73,4 +116,4 @@ public class SudokuButtonListener implements ActionListener { } return true; } -} +} \ No newline at end of file diff --git a/SudokuCreator.java b/SudokuCreator.java index 6f2fbc2..c22a2e0 100644 --- a/SudokuCreator.java +++ b/SudokuCreator.java @@ -92,6 +92,7 @@ public class SudokuCreator extends SudokuUI { Grid grid = sudoku.getGrid(); for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { + if() int value = grid.getCell(row, col).getValue(); buttons[row][col].setText(value == 0 ? "" : String.valueOf(value)); } diff --git a/SudokuSolver.java b/SudokuSolver.java index 6ac316b..aa4a525 100644 --- a/SudokuSolver.java +++ b/SudokuSolver.java @@ -1,21 +1,37 @@ +/** + * La classe SudokuSolver fournit des méthodes pour résoudre une grille de Sudoku. + * Elle utilise une approche de récursion avec backtracking pour trouver la solution. + */ public class SudokuSolver { + + /** + * Résout la grille de Sudoku donnée. + * @param grid La grille de Sudoku à résoudre. + * @return True si la grille a été résolue avec succès, False si elle est insoluble. + */ public boolean solve(Grid grid) { long startTime = System.currentTimeMillis(); // Temps de début de la résolution - + boolean isSolved = solveRecursive(grid); - + long endTime = System.currentTimeMillis(); // Temps de fin de la résolution long duration = endTime - startTime; // Calcul de la durée de résolution - + if (isSolved) { System.out.println("La grille a été résolue en " + duration + " millisecondes."); } else { System.out.println("La grille est insoluble."); } - + return isSolved; } - + + /** + * Méthode récursive pour résoudre la grille de Sudoku. + * Utilise une approche de backtracking pour explorer toutes les possibilités. + * @param grid La grille de Sudoku à résoudre. + * @return True si la grille a été résolue avec succès, False si elle est insoluble. + */ private boolean solveRecursive(Grid grid) { for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { @@ -39,6 +55,14 @@ public class SudokuSolver { return true; } + /** + * Vérifie si le placement d'un nombre dans une cellule est sûr. + * @param grid La grille de Sudoku. + * @param row L'indice de ligne de la cellule. + * @param col L'indice de colonne de la cellule. + * @param num Le nombre à vérifier. + * @return True si le placement est sûr, False sinon. + */ public boolean isSafe(Grid grid, int row, int col, int num) { // Vérifier la ligne for (int i = 0; i < 9; i++) { @@ -46,14 +70,14 @@ public class SudokuSolver { return false; } } - + // Vérifier la colonne for (int i = 0; i < 9; i++) { if (grid.getCell(i, col).getValue() == num) { return false; } } - + // Vérifier la région 3x3 int startRow = row - row % 3; int startCol = col - col % 3; @@ -64,7 +88,7 @@ public class SudokuSolver { } } } - + return true; } -} +} \ No newline at end of file diff --git a/SudokuUI.java b/SudokuUI.java index 4aaa628..482b358 100644 --- a/SudokuUI.java +++ b/SudokuUI.java @@ -1,10 +1,26 @@ import javax.swing.*; import java.awt.*; +/** + * La classe abstraite SudokuUI est une interface graphique pour afficher et interagir avec une grille de Sudoku. + * Elle fournit les méthodes de base pour la création de l'interface utilisateur. + */ public abstract class SudokuUI extends JFrame { + + /** + * La grille de Sudoku associée à l'interface utilisateur. + */ protected Sudoku sudoku; + + /** + * Tableau bidimensionnel de boutons représentant les cellules de la grille de Sudoku. + */ protected JButton[][] buttons; + /** + * Constructeur de la classe SudokuUI. + * @param sudoku La grille de Sudoku à afficher et à interagir. + */ public SudokuUI(Sudoku sudoku) { this.sudoku = sudoku; this.buttons = new JButton[9][9]; @@ -28,8 +44,16 @@ public abstract class SudokuUI extends JFrame { setVisible(true); } + /** + * Méthode abstraite permettant d'obtenir le texte du titre de l'interface utilisateur. + * @return Le texte du titre. + */ protected abstract String getTitleText(); + /** + * Méthode pour créer les boutons de la grille de Sudoku. + * @param gridPanel Le panneau de la grille où les boutons seront ajoutés. + */ protected void createGridButtons(JPanel gridPanel) { Grid grid = sudoku.getGrid(); // Obtenez la grille à partir de Sudoku for (int row = 0; row < 9; row++) { @@ -59,6 +83,4 @@ public abstract class SudokuUI extends JFrame { } } } - - -} +} \ No newline at end of file