SAE21_2023/src/GSSolver.java

71 lines
2.5 KiB
Java
Raw Normal View History

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 {
/**
* Grille de Sudoku à résoudre
*/
private GSGrid grid;
/**
* Fenêtre dans laquelle afficher la résolution
*/
private Window window;
/**
* Étiquette pour afficher le statut de la résolution
*/
private JLabel label = new JLabel("Resolution en cours...");
/**
* Temps de début de la résolution
*/
private long startTime;
/**
* 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
}
}