2024-05-04 17:56:30 +02:00
|
|
|
import javax.swing.*;
|
|
|
|
import javax.swing.filechooser.FileNameExtensionFilter;
|
|
|
|
import java.awt.*;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import java.awt.event.ActionListener;
|
|
|
|
import java.io.*;
|
|
|
|
|
2024-05-05 17:43:50 +02:00
|
|
|
/**
|
|
|
|
* La classe SudokuCreator étend la classe SudokuUI et permet de créer des grilles de Sudoku.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
public class SudokuCreator extends SudokuUI {
|
2024-05-05 13:28:56 +02:00
|
|
|
private static int numberOfClues = 25; // Nombre de "clues" par défaut
|
2024-05-04 17:56:30 +02:00
|
|
|
|
2024-05-05 17:43:50 +02:00
|
|
|
/**
|
|
|
|
* Constructeur de la classe SudokuCreator.
|
|
|
|
* @param sudoku Instance de la classe Sudoku.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
public SudokuCreator(Sudoku sudoku) {
|
|
|
|
super(sudoku);
|
|
|
|
createAdditionalButtons();
|
|
|
|
}
|
|
|
|
|
2024-05-05 17:43:50 +02:00
|
|
|
/**
|
|
|
|
* Crée les boutons supplémentaires pour charger, générer et sauvegarder les grilles de Sudoku.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
protected void createAdditionalButtons() {
|
|
|
|
createLoadButton();
|
|
|
|
createGenerateButton();
|
|
|
|
createSaveButton();
|
|
|
|
pack();
|
|
|
|
}
|
|
|
|
|
2024-05-05 17:43:50 +02:00
|
|
|
/**
|
|
|
|
* Crée le bouton pour charger une grille de Sudoku depuis un fichier.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2024-05-05 17:43:50 +02:00
|
|
|
/**
|
|
|
|
* Crée le bouton pour générer une nouvelle grille de Sudoku.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
private void createGenerateButton() {
|
|
|
|
JButton generateButton = new JButton("Générer");
|
|
|
|
generateButton.addActionListener(new ActionListener() {
|
|
|
|
@Override
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
2024-05-05 13:28:56 +02:00
|
|
|
// Demander à l'utilisateur combien de "clues" il souhaite spécifier
|
|
|
|
String input = JOptionPane.showInputDialog(null, "Entrez le nombre de clues :");
|
|
|
|
try {
|
|
|
|
// Convertir l'entrée en entier
|
|
|
|
numberOfClues = Integer.parseInt(input);
|
|
|
|
} catch (NumberFormatException ex) {
|
|
|
|
// Gérer les cas où l'utilisateur entre un texte non numérique
|
|
|
|
JOptionPane.showMessageDialog(null, "Veuillez entrer un nombre valide.", "Erreur", JOptionPane.ERROR_MESSAGE);
|
|
|
|
return; // Sortir de la méthode si l'entrée n'est pas un nombre valide
|
|
|
|
}
|
|
|
|
|
|
|
|
// Générer une nouvelle grille Sudoku avec le nombre de "clues" spécifié
|
|
|
|
Grid newGrid = GenerateGrid.generateSudokuGrid(numberOfClues);
|
2024-05-04 17:56:30 +02:00
|
|
|
// 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();
|
|
|
|
}
|
|
|
|
});
|
2024-05-05 13:28:56 +02:00
|
|
|
|
2024-05-04 17:56:30 +02:00
|
|
|
JPanel buttonPanel = new JPanel();
|
|
|
|
buttonPanel.add(generateButton, BorderLayout.EAST);
|
|
|
|
add(buttonPanel, BorderLayout.EAST);
|
|
|
|
}
|
|
|
|
|
2024-05-05 17:43:50 +02:00
|
|
|
/**
|
|
|
|
* Crée le bouton pour sauvegarder la grille de Sudoku dans un fichier.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2024-05-05 17:43:50 +02:00
|
|
|
/**
|
|
|
|
* Met à jour l'affichage de la grille dans l'interface utilisateur.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
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));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-05-05 17:43:50 +02:00
|
|
|
/**
|
|
|
|
* Obtient le texte du titre de l'interface utilisateur.
|
|
|
|
* @return Le texte du titre.
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
protected String getTitleText() {
|
|
|
|
return "Sudoku Creator";
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Méthode principale pour tester la classe SudokuCreator.
|
|
|
|
* @param args Arguments de la ligne de commande (non utilisés).
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
public static void main(String[] args) {
|
|
|
|
Sudoku sudoku = new Sudoku();
|
|
|
|
new SudokuCreator(sudoku);
|
|
|
|
}
|
2024-05-05 13:28:56 +02:00
|
|
|
|
2024-05-05 13:38:52 +02:00
|
|
|
}
|