Javadoc Sudoku
This commit is contained in:
parent
aecb28232e
commit
508b423def
32
Sudoku.java
32
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 {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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 {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user