import javax.swing.*; import java.awt.*; /** * La classe GSSolver résout une grille de Sudoku et affiche le résultat dans une fenêtre. * @version 1.O * @author Moncef STITI * @author Marco ORFAO */ public class GSSolver { private GSGrid grid; // Grille de Sudoku à résoudre private Window window; // Fenêtre dans laquelle afficher la résolution private JLabel label = new JLabel("Resolution en cours..."); // Étiquette pour afficher le statut de la résolution private long startTime; // Temps de début de la résolution /** * Constructeur de la classe GSSolver. * @param grid La grille de Sudoku à résoudre. * @param window La fenêtre dans laquelle afficher la résolution. */ public GSSolver(GSGrid grid, Window window) { this.grid = grid; this.window = window; Window.removeAllComponents(this.window); // Efface tous les composants de la fenêtre this.window.setPageTitle("Résolution automatique"); this.startSolving(); // Démarre la résolution } /** * Démarre le processus de résolution de la grille de Sudoku. */ private void startSolving() { startTime = System.nanoTime(); // Enregistre le temps de début de la résolution BorderLayout layout = new BorderLayout(); // Gestionnaire de mise en page pour la fenêtre window.setLayout(layout); // Définit le gestionnaire de mise en page pour la fenêtre window.getContentPane().add(label, BorderLayout.SOUTH); // Ajoute l'étiquette au bas de la fenêtre window.getContentPane().add(grid, BorderLayout.CENTER); // Ajoute la grille au centre de la fenêtre grid.solve(); // Résout la grille de Sudoku // Vérifie si le jeu est terminé if (isGameOver()) { double time = (double) (System.nanoTime() - startTime) / 1_000_000_000; // Calcule le temps écoulé en secondes label.setText("Résolu en " + time + " secondes."); // Met à jour le texte de l'étiquette avec le temps écoulé label.setForeground(Color.WHITE); // Définit la couleur du texte sur blanc } } /** * Vérifie si le jeu est terminé. * @return true si le jeu est terminé, false sinon. */ private boolean isGameOver() { return !grid.isComplete(); // Vérifie si la grille est complète } }