Ajout javadoc Cell.java,GenerateGrid.java,Grid.java | Amélioration UI
This commit is contained in:
parent
c3d2bd70d4
commit
0c81953d8d
19
Cell.java
19
Cell.java
@ -1,19 +1,36 @@
|
||||
/**
|
||||
* La classe Cell représente une cellule individuelle dans une grille de Sudoku.
|
||||
*/
|
||||
public class Cell {
|
||||
private int value;
|
||||
|
||||
/**
|
||||
* Constructeur par défaut initialisant la valeur de la cellule à zéro.
|
||||
*/
|
||||
public Cell() {
|
||||
this.value = 0;
|
||||
}
|
||||
|
||||
// Constructeur prenant une valeur comme argument
|
||||
/**
|
||||
* Constructeur prenant une valeur comme argument et l'assignant à la cellule.
|
||||
* @param value La valeur à assigner à la cellule.
|
||||
*/
|
||||
public Cell(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtient la valeur actuelle de la cellule.
|
||||
* @return La valeur de la cellule.
|
||||
*/
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Définit une nouvelle valeur pour la cellule.
|
||||
* @param value La nouvelle valeur à assigner à la cellule.
|
||||
*/
|
||||
public void setValue(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
@ -1,31 +1,49 @@
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Cette classe génère une grille de Sudoku aléatoire.
|
||||
*/
|
||||
public class GenerateGrid {
|
||||
private static final int GRID_SIZE = 9;
|
||||
private static final int EMPTY_CELL = 0;
|
||||
private static final int MINIMUM_CLUES = 25; // Modifier ce nombre en fonction du nombre de clues désiré
|
||||
|
||||
|
||||
/**
|
||||
* Méthode principale pour tester la génération d'une grille ( Seulement pour le debug ).
|
||||
* @param args Arguments de la ligne de commande (non utilisés).
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
Grid grid = generatePuzzleGrid();
|
||||
Grid grid = generateSudokuGrid();
|
||||
printGrid(grid);
|
||||
}
|
||||
|
||||
public static Grid generatePuzzleGrid() {
|
||||
return generateGrid();
|
||||
}
|
||||
|
||||
public static Grid generateGrid() {
|
||||
/**
|
||||
* Génère une grille de Sudoku.
|
||||
* @return La grille de Sudoku générée.
|
||||
*/
|
||||
public static Grid generateSudokuGrid() {
|
||||
Grid grid = new Grid();
|
||||
solveSudoku(grid);
|
||||
removeNumbers(grid);
|
||||
return grid;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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, sinon False.
|
||||
*/
|
||||
private static boolean solveSudoku(Grid grid) {
|
||||
return solveSudokuHelper(grid, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Méthode auxiliaire récursive pour résoudre la grille de Sudoku.
|
||||
* @param grid La grille de Sudoku à résoudre.
|
||||
* @param row L'indice de ligne actuel.
|
||||
* @param col L'indice de colonne actuel.
|
||||
* @return True si la grille a été résolue avec succès, sinon False.
|
||||
*/
|
||||
private static boolean solveSudokuHelper(Grid grid, int row, int col) {
|
||||
if (row == GRID_SIZE) {
|
||||
row = 0;
|
||||
@ -55,6 +73,14 @@ public class GenerateGrid {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si un mouvement donné est valide.
|
||||
* @param grid La grille de Sudoku.
|
||||
* @param row L'indice de ligne.
|
||||
* @param col L'indice de colonne.
|
||||
* @param num Le nombre à placer.
|
||||
* @return True si le mouvement est valide, sinon False.
|
||||
*/
|
||||
private static boolean isValidMove(Grid grid, int row, int col, int num) {
|
||||
for (int i = 0; i < GRID_SIZE; i++) {
|
||||
if (grid.getCell(row, i).getValue() == num || grid.getCell(i, col).getValue() == num) {
|
||||
@ -76,6 +102,11 @@ public class GenerateGrid {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mélange les éléments d'un tableau.
|
||||
* @param array Le tableau à mélanger.
|
||||
* @param random L'instance de Random à utiliser.
|
||||
*/
|
||||
private static void shuffleArray(int[] array, Random random) {
|
||||
for (int i = array.length - 1; i > 0; i--) {
|
||||
int index = random.nextInt(i + 1);
|
||||
@ -85,6 +116,10 @@ public class GenerateGrid {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime les nombres de la grille pour créer une énigme de Sudoku.
|
||||
* @param grid La grille de Sudoku.
|
||||
*/
|
||||
public static void removeNumbers(Grid grid) {
|
||||
Random random = new Random();
|
||||
|
||||
@ -101,6 +136,11 @@ public class GenerateGrid {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compte le nombre de "clues" dans la grille.
|
||||
* @param grid La grille de Sudoku.
|
||||
* @return Le nombre de "clues" dans la grille.
|
||||
*/
|
||||
private static int countClues(Grid grid) {
|
||||
int count = 0;
|
||||
for (int row = 0; row < GRID_SIZE; row++) {
|
||||
@ -113,6 +153,10 @@ public class GenerateGrid {
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Affiche la grille de Sudoku dans la console.
|
||||
* @param grid La grille de Sudoku à afficher.
|
||||
*/
|
||||
public static void printGrid(Grid grid) {
|
||||
for (int row = 0; row < GRID_SIZE; row++) {
|
||||
for (int col = 0; col < GRID_SIZE; col++) {
|
||||
|
44
Grid.java
44
Grid.java
@ -1,14 +1,18 @@
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.EOFException;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
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++) {
|
||||
@ -18,6 +22,10 @@ public class Grid {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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++) {
|
||||
@ -33,16 +41,15 @@ public class Grid {
|
||||
}
|
||||
}
|
||||
System.out.println("Success");
|
||||
System.out.println(this);
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println("Erreur : Fichier non trouvé: " + e.getMessage());
|
||||
} catch (EOFException e) {
|
||||
System.err.println("Erreur : Fin de fichier atteinte prématurément: " + e.getMessage());
|
||||
} catch (IOException e) {
|
||||
System.err.println("Erreur d'entrée/sortie: " + e.getMessage());
|
||||
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++) {
|
||||
@ -54,17 +61,25 @@ public class Grid {
|
||||
output.writeInt(Integer.parseInt(line.toString()));
|
||||
}
|
||||
System.out.println("Grille sauvegardée avec succès dans " + fileName);
|
||||
} catch (FileNotFoundException e) {
|
||||
System.err.println("Erreur : Fichier non trouvé: " + e.getMessage());
|
||||
} catch (IOException e) {
|
||||
System.err.println("Erreur d'entrée/sortie: " + e.getMessage());
|
||||
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++) {
|
||||
@ -73,6 +88,9 @@ public class Grid {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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++) {
|
||||
@ -81,4 +99,4 @@ public class Grid {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
2
Makefile
2
Makefile
@ -1,5 +1,5 @@
|
||||
# List of Java source files
|
||||
SRCS := Cell.java GenerateGrid.java Grid.java Sudoku.java SudokuButtonListener.java SudokuSolver.java SudokuUI.java
|
||||
SRCS := Cell.java GenerateGrid.java Grid.java Sudoku.java SudokuButtonListener.java SudokuSolver.java SudokuUI.java SudokuCreator.java
|
||||
|
||||
# Directory to store compiled class files
|
||||
BUILD_DIR := build
|
||||
|
@ -6,12 +6,6 @@ public class Sudoku {
|
||||
this.grid = new Grid(); // Initialiser avec une grille vide
|
||||
this.solved = false;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Sudoku sudoku = new Sudoku();
|
||||
sudoku.printGrid(); // Afficher la grille non résolue dans la console
|
||||
new SudokuUI(sudoku);
|
||||
}
|
||||
|
||||
public Grid getGrid() {
|
||||
return grid;
|
||||
|
106
SudokuCreator.java
Normal file
106
SudokuCreator.java
Normal file
@ -0,0 +1,106 @@
|
||||
import javax.swing.*;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.*;
|
||||
|
||||
public class SudokuCreator extends SudokuUI {
|
||||
|
||||
public SudokuCreator(Sudoku sudoku) {
|
||||
super(sudoku);
|
||||
createAdditionalButtons();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTitleText() {
|
||||
return "Sudoku Creator";
|
||||
}
|
||||
|
||||
protected void createAdditionalButtons() {
|
||||
createLoadButton();
|
||||
createGenerateButton();
|
||||
createSaveButton();
|
||||
pack();
|
||||
}
|
||||
|
||||
private void createLoadButton() {
|
||||
JButton loadButton = new JButton("Charger");
|
||||
loadButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
JFileChooser fileChooser = new JFileChooser();
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter("Fichiers de grille Sudoku (*.gri)", "gri");
|
||||
fileChooser.setFileFilter(filter);
|
||||
int returnValue = fileChooser.showOpenDialog(null);
|
||||
if (returnValue == JFileChooser.APPROVE_OPTION) {
|
||||
File selectedFile = fileChooser.getSelectedFile();
|
||||
sudoku.loadGridFromFile(selectedFile.getAbsolutePath());
|
||||
updateGrid();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.add(loadButton, BorderLayout.NORTH);
|
||||
add(buttonPanel, BorderLayout.NORTH);
|
||||
}
|
||||
|
||||
private void createGenerateButton() {
|
||||
JButton generateButton = new JButton("Générer");
|
||||
generateButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
// Générer une nouvelle grille Sudoku
|
||||
Grid newGrid = GenerateGrid.generateSudokuGrid();
|
||||
// Définir la nouvelle grille dans l'instance de Sudoku
|
||||
sudoku.setGrid(newGrid);
|
||||
// Afficher la grille générée dans la console
|
||||
sudoku.printGrid();
|
||||
// Mettre à jour l'interface utilisateur pour afficher la nouvelle grille
|
||||
updateGrid();
|
||||
}
|
||||
});
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.add(generateButton, BorderLayout.EAST);
|
||||
add(buttonPanel, BorderLayout.EAST);
|
||||
}
|
||||
|
||||
private void createSaveButton() {
|
||||
JButton saveButton = new JButton("Sauvegarder");
|
||||
saveButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
JFileChooser fileChooser = new JFileChooser();
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter("Fichiers de grille Sudoku (*.gri)", "gri");
|
||||
fileChooser.setFileFilter(filter);
|
||||
int returnValue = fileChooser.showSaveDialog(null);
|
||||
if (returnValue == JFileChooser.APPROVE_OPTION) {
|
||||
File selectedFile = fileChooser.getSelectedFile();
|
||||
sudoku.getGrid().saveGridToFile(selectedFile.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.add(saveButton, BorderLayout.WEST);
|
||||
add(buttonPanel, BorderLayout.WEST);
|
||||
}
|
||||
|
||||
private void updateGrid() {
|
||||
Grid grid = sudoku.getGrid();
|
||||
for (int row = 0; row < 9; row++) {
|
||||
for (int col = 0; col < 9; col++) {
|
||||
int value = grid.getCell(row, col).getValue();
|
||||
buttons[row][col].setText(value == 0 ? "" : String.valueOf(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Sudoku sudoku = new Sudoku();
|
||||
new SudokuCreator(sudoku);
|
||||
}
|
||||
|
||||
}
|
90
SudokuGame.java
Normal file
90
SudokuGame.java
Normal file
@ -0,0 +1,90 @@
|
||||
import javax.swing.*;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
|
||||
public class SudokuGame extends SudokuUI {
|
||||
|
||||
public SudokuGame(Sudoku sudoku) {
|
||||
super(sudoku);
|
||||
createAdditionalButtons();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTitleText() {
|
||||
return "Sudoku Game";
|
||||
}
|
||||
|
||||
protected void createAdditionalButtons() {
|
||||
createLoadButton();
|
||||
createSolveButton();
|
||||
pack(); // Redimensionner la fenêtre pour s'adapter aux nouveaux boutons
|
||||
}
|
||||
|
||||
|
||||
private void createSolveButton() {
|
||||
JButton solveButton = new JButton("Résoudre");
|
||||
solveButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
SudokuSolver solver = new SudokuSolver(); // Créez une instance de SudokuSolver
|
||||
Grid solvedGrid = new Grid(); // Créez une nouvelle grille pour stocker la solution
|
||||
solvedGrid.copyFrom(sudoku.getGrid()); // Copiez la grille actuelle de Sudoku
|
||||
|
||||
// Résolvez la grille
|
||||
if (solver.solve(solvedGrid)) {
|
||||
// Si une solution est trouvée, mettez à jour la grille Sudoku avec la solution
|
||||
sudoku.getGrid().copyFrom(solvedGrid);
|
||||
updateGrid();
|
||||
} else {
|
||||
// Sinon, affichez un message indiquant que la grille est insoluble
|
||||
JOptionPane.showMessageDialog(null, "La grille est insoluble.");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.add(solveButton);
|
||||
add(buttonPanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
private void createLoadButton() {
|
||||
JButton loadButton = new JButton("Charger");
|
||||
loadButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
JFileChooser fileChooser = new JFileChooser();
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter("Fichiers de grille Sudoku (*.gri)", "gri");
|
||||
fileChooser.setFileFilter(filter);
|
||||
int returnValue = fileChooser.showOpenDialog(null);
|
||||
if (returnValue == JFileChooser.APPROVE_OPTION) {
|
||||
File selectedFile = fileChooser.getSelectedFile();
|
||||
sudoku.loadGridFromFile(selectedFile.getAbsolutePath());
|
||||
updateGrid();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.add(loadButton);
|
||||
add(buttonPanel, BorderLayout.NORTH);
|
||||
}
|
||||
|
||||
private void updateGrid() {
|
||||
Grid grid = sudoku.getGrid();
|
||||
for (int row = 0; row < 9; row++) {
|
||||
for (int col = 0; col < 9; col++) {
|
||||
int value = grid.getCell(row, col).getValue();
|
||||
buttons[row][col].setText(value == 0 ? "" : String.valueOf(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Sudoku sudoku = new Sudoku();
|
||||
new SudokuGame(sudoku);
|
||||
}
|
||||
}
|
114
SudokuUI.java
114
SudokuUI.java
@ -1,19 +1,15 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
|
||||
public class SudokuUI extends JFrame {
|
||||
private Sudoku sudoku;
|
||||
private JButton[][] buttons;
|
||||
public abstract class SudokuUI extends JFrame {
|
||||
protected Sudoku sudoku;
|
||||
protected JButton[][] buttons;
|
||||
|
||||
public SudokuUI(Sudoku sudoku) {
|
||||
this.sudoku = sudoku;
|
||||
this.buttons = new JButton[9][9];
|
||||
|
||||
setTitle("Sudoku");
|
||||
setTitle(getTitleText());
|
||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||
JPanel gridPanel = new JPanel(new GridLayout(9, 9));
|
||||
gridPanel.setBackground(Color.WHITE);
|
||||
@ -22,13 +18,6 @@ public class SudokuUI extends JFrame {
|
||||
// Création des boutons de la grille
|
||||
createGridButtons(gridPanel);
|
||||
|
||||
// Création du bouton "Résoudre"
|
||||
createSolveButton();
|
||||
|
||||
// Création des boutons "Charger" et "Générer"
|
||||
createLoadButton();
|
||||
createGenerateButton();
|
||||
|
||||
// Calcul de la taille préférée de la fenêtre en fonction de la taille de la grille
|
||||
int preferredSize = 50 * 9; // 50 est la taille approximative d'un bouton
|
||||
gridPanel.setPreferredSize(new Dimension(preferredSize, preferredSize));
|
||||
@ -39,7 +28,9 @@ public class SudokuUI extends JFrame {
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
private void createGridButtons(JPanel gridPanel) {
|
||||
protected abstract String getTitleText();
|
||||
|
||||
protected void createGridButtons(JPanel gridPanel) {
|
||||
Grid grid = sudoku.getGrid(); // Obtenez la grille à partir de Sudoku
|
||||
for (int row = 0; row < 9; row++) {
|
||||
for (int col = 0; col < 9; col++) {
|
||||
@ -47,94 +38,27 @@ public class SudokuUI extends JFrame {
|
||||
button.setFont(new Font("Arial", Font.BOLD, 24));
|
||||
button.setContentAreaFilled(false);
|
||||
button.setBorder(BorderFactory.createLineBorder(Color.BLACK));
|
||||
button.setMinimumSize(new Dimension(50, 50)); // Taille minimale des boutons
|
||||
|
||||
// Ajout de bordures plus épaisses pour délimiter les carrés de 3x3
|
||||
if ((row + 1) % 3 == 0 && (col + 1) % 3 == 0) {
|
||||
button.setBorder(BorderFactory.createMatteBorder(1, 1, 3, 3, Color.BLACK));
|
||||
} else if ((row + 1) % 3 == 0) {
|
||||
button.setBorder(BorderFactory.createMatteBorder(1, 1, 3, 1, Color.BLACK));
|
||||
} else if ((col + 1) % 3 == 0) {
|
||||
button.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 3, Color.BLACK));
|
||||
}
|
||||
|
||||
button.addActionListener(new SudokuButtonListener(row, col, sudoku, buttons));
|
||||
gridPanel.add(button);
|
||||
buttons[row][col] = button;
|
||||
|
||||
|
||||
// Mettez à jour le texte des boutons avec les valeurs de la grille Sudoku
|
||||
int value = grid.getCell(row, col).getValue();
|
||||
buttons[row][col].setText(value == 0 ? "" : String.valueOf(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createSolveButton() {
|
||||
JButton solveButton = new JButton("Résoudre");
|
||||
solveButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
SudokuSolver solver = new SudokuSolver(); // Créez une instance de SudokuSolver
|
||||
Grid solvedGrid = new Grid(); // Créez une nouvelle grille pour stocker la solution
|
||||
solvedGrid.copyFrom(sudoku.getGrid()); // Copiez la grille actuelle de Sudoku
|
||||
|
||||
// Résolvez la grille
|
||||
if (solver.solve(solvedGrid)) {
|
||||
// Si une solution est trouvée, mettez à jour la grille Sudoku avec la solution
|
||||
sudoku.getGrid().copyFrom(solvedGrid);
|
||||
updateGrid();
|
||||
} else {
|
||||
// Sinon, affichez un message indiquant que la grille est insoluble
|
||||
JOptionPane.showMessageDialog(null, "La grille est insoluble.");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.add(solveButton);
|
||||
add(buttonPanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
private void createLoadButton() {
|
||||
JButton loadButton = new JButton("Charger");
|
||||
loadButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
JFileChooser fileChooser = new JFileChooser();
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter("Fichiers de grille Sudoku (*.gri)", "gri");
|
||||
fileChooser.setFileFilter(filter);
|
||||
int returnValue = fileChooser.showOpenDialog(null);
|
||||
if (returnValue == JFileChooser.APPROVE_OPTION) {
|
||||
File selectedFile = fileChooser.getSelectedFile();
|
||||
sudoku.loadGridFromFile(selectedFile.getAbsolutePath());
|
||||
updateGrid();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.add(loadButton);
|
||||
add(buttonPanel, BorderLayout.NORTH);
|
||||
}
|
||||
|
||||
private void createGenerateButton() {
|
||||
JButton generateButton = new JButton("Générer");
|
||||
generateButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
// Générer une nouvelle grille Sudoku
|
||||
Grid newGrid = GenerateGrid.generatePuzzleGrid();
|
||||
// Définir la nouvelle grille dans l'instance de Sudoku
|
||||
sudoku.setGrid(newGrid);
|
||||
// Afficher la grille générée dans la console
|
||||
sudoku.printGrid();
|
||||
// Mettre à jour l'interface utilisateur pour afficher la nouvelle grille
|
||||
updateGrid();
|
||||
}
|
||||
});
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.add(generateButton);
|
||||
add(buttonPanel, BorderLayout.EAST);
|
||||
}
|
||||
|
||||
|
||||
private void updateGrid() {
|
||||
Grid grid = sudoku.getGrid();
|
||||
for (int row = 0; row < 9; row++) {
|
||||
for (int col = 0; col < 9; col++) {
|
||||
int value = grid.getCell(row, col).getValue();
|
||||
buttons[row][col].setText(value == 0 ? "" : String.valueOf(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user