This commit is contained in:
2024-04-06 22:10:12 +02:00
parent c818eec943
commit ee478f0563
9 changed files with 83 additions and 27 deletions
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+56 -27
View File
@@ -6,53 +6,82 @@ public class Main {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("Le programme Main a démarré."); System.out.println("Le programme Main a démarré.");
int[][] grille = GenerateurSudoku.genererGrille(); // Obtenir la grille par défaut // Création de la fenêtre de dialogue pour choisir le mode de résolution
System.out.println("Grille Sudoku générée avec succès."); JFrame choixFrame = new JFrame("Choix de résolution du Sudoku");
choixFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
choixFrame.setSize(400, 200);
choixFrame.setLayout(new BorderLayout());
choixFrame.setLocationRelativeTo(null); // Centrer la fenêtre sur l'écran
JFrame frame = new JFrame("Sudoku"); JLabel label = new JLabel("Choisissez le mode de résolution du Sudoku :");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); label.setHorizontalAlignment(JLabel.CENTER);
SaisieGrille saisieGrille = new SaisieGrille(grille); // Utilisation de la classe SaisieGrille pour permettre la saisie des valeurs
JButton automatiqueButton = new JButton("Automatique");
JButton manuelButton = new JButton("Manuel");
// Panneau pour contenir les boutons
JPanel boutonsPanel = new JPanel(); JPanel boutonsPanel = new JPanel();
boutonsPanel.setLayout(new FlowLayout()); boutonsPanel.setLayout(new FlowLayout());
boutonsPanel.add(automatiqueButton);
boutonsPanel.add(manuelButton);
// Bouton "Résoudre" choixFrame.add(label, BorderLayout.NORTH);
JButton resoudreButton = new JButton("Résoudre"); choixFrame.add(boutonsPanel, BorderLayout.CENTER);
resoudreButton.addActionListener(new ActionListener() { choixFrame.setVisible(true);
// Gestion du bouton "Automatique"
automatiqueButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
long startTime = System.nanoTime(); // Temps avant la résolution choixFrame.dispose(); // Fermer la fenêtre de choix
int[][] grille = GenerateurSudoku.genererGrille(); // Obtenir la grille par défaut
System.out.println("Grille Sudoku générée avec succès.");
// Résoudre automatiquement le Sudoku
if (Resolveur.resoudreSudoku(grille)) { if (Resolveur.resoudreSudoku(grille)) {
long endTime = System.nanoTime(); // Temps après la résolution // Créer et afficher la fenêtre principale avec la grille résolue
long duration = (endTime - startTime) / 1000000; // Durée en millisecondes afficherFenetre(grille, true);
saisieGrille.repaint(); // Redessiner la grille après la résolution
JOptionPane.showMessageDialog(frame, "Grille résolue avec succès en " + duration + " millisecondes !");
} else { } else {
JOptionPane.showMessageDialog(frame, "Impossible de résoudre la grille."); JOptionPane.showMessageDialog(null, "Impossible de résoudre la grille.");
} }
} }
}); });
// Bouton "Réinitialiser" // Gestion du bouton "Manuel"
JButton reinitialiserButton = new JButton("Réinitialiser"); manuelButton.addActionListener(new ActionListener() {
reinitialiserButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
Reinitialiser reinitialiser = new Reinitialiser(grille, saisieGrille); choixFrame.dispose(); // Fermer la fenêtre de choix
reinitialiser.actionPerformed(e);
int[][] grille = GenerateurSudoku.genererGrille(); // Obtenir la grille par défaut
System.out.println("Grille Sudoku générée avec succès.");
// Créer et afficher la fenêtre principale pour la saisie manuelle
afficherFenetre(grille, false);
} }
}); });
}
// Ajout des boutons au panneau // Fonction pour créer et afficher la fenêtre principale avec la grille spécifiée
boutonsPanel.add(resoudreButton); private static void afficherFenetre(int[][] grille, boolean modeAutomatique) {
boutonsPanel.add(reinitialiserButton); JFrame frame = new JFrame("Sudoku");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SaisieGrille saisieGrille = new SaisieGrille(grille); // Utilisation de la classe SaisieGrille pour permettre la saisie des valeurs
// Ajout des composants au frame if (!modeAutomatique) { // Ajouter le bouton "Réinitialiser" seulement en mode manuel
frame.add(saisieGrille, BorderLayout.CENTER); JButton reinitialiserButton = new JButton("Réinitialiser");
frame.add(boutonsPanel, BorderLayout.SOUTH); reinitialiserButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Reinitialiser reinitialiser = new Reinitialiser(grille, saisieGrille);
reinitialiser.actionPerformed(e);
}
});
frame.add(reinitialiserButton, BorderLayout.SOUTH); // Ajouter le bouton "Réinitialiser"
}
frame.add(saisieGrille, BorderLayout.CENTER); // Ajouter la grille à la fenêtre
frame.pack(); frame.pack();
frame.setLocationRelativeTo(null); // Centrer la fenêtre sur l'écran frame.setLocationRelativeTo(null); // Centrer la fenêtre sur l'écran
Binary file not shown.
+27
View File
@@ -0,0 +1,27 @@
import java.io.*;
public class OuvertureFichier {
public static int[][] lireFichier(File fichier) {
int[][] grille = new int[9][9];
try (BufferedReader br = new BufferedReader(new FileReader(fichier))) {
String ligne;
int i = 0;
while ((ligne = br.readLine()) != null && i < 9) {
for (int j = 0; j < Math.min(ligne.length(), 9); j++) {
char caractere = ligne.charAt(j);
if (caractere != ' ') {
// Convertir chaque caractère en valeur numérique
int valeur = Integer.parseInt(String.valueOf(caractere), 16);
grille[i][j] = valeur;
}
}
i++;
}
} catch (IOException e) {
e.printStackTrace();
}
return grille;
}
}