diff --git a/Grilles/exemple.gri b/Grilles/exemple.gri new file mode 100644 index 0000000..5637e4d Binary files /dev/null and b/Grilles/exemple.gri differ diff --git a/Main$1.class b/Main$1.class index f029fb0..4d464fe 100644 Binary files a/Main$1.class and b/Main$1.class differ diff --git a/Main$2.class b/Main$2.class index 0a6b615..b37841e 100644 Binary files a/Main$2.class and b/Main$2.class differ diff --git a/Main$3.class b/Main$3.class new file mode 100644 index 0000000..39cf51e Binary files /dev/null and b/Main$3.class differ diff --git a/Main$4.class b/Main$4.class new file mode 100644 index 0000000..2a54235 Binary files /dev/null and b/Main$4.class differ diff --git a/Main.class b/Main.class index 2df9a15..63486a8 100644 Binary files a/Main.class and b/Main.class differ diff --git a/Main.java b/Main.java index 9ea73b7..2f71e29 100644 --- a/Main.java +++ b/Main.java @@ -6,53 +6,82 @@ public class Main { public static void main(String[] args) { System.out.println("Le programme Main a démarré."); - int[][] grille = GenerateurSudoku.genererGrille(); // Obtenir la grille par défaut - System.out.println("Grille Sudoku générée avec succès."); + // Création de la fenêtre de dialogue pour choisir le mode de résolution + 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"); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - SaisieGrille saisieGrille = new SaisieGrille(grille); // Utilisation de la classe SaisieGrille pour permettre la saisie des valeurs + JLabel label = new JLabel("Choisissez le mode de résolution du Sudoku :"); + label.setHorizontalAlignment(JLabel.CENTER); + + JButton automatiqueButton = new JButton("Automatique"); + JButton manuelButton = new JButton("Manuel"); - // Panneau pour contenir les boutons JPanel boutonsPanel = new JPanel(); boutonsPanel.setLayout(new FlowLayout()); + boutonsPanel.add(automatiqueButton); + boutonsPanel.add(manuelButton); - // Bouton "Résoudre" - JButton resoudreButton = new JButton("Résoudre"); - resoudreButton.addActionListener(new ActionListener() { + choixFrame.add(label, BorderLayout.NORTH); + choixFrame.add(boutonsPanel, BorderLayout.CENTER); + choixFrame.setVisible(true); + + // Gestion du bouton "Automatique" + automatiqueButton.addActionListener(new ActionListener() { @Override 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)) { - long endTime = System.nanoTime(); // Temps après la résolution - long duration = (endTime - startTime) / 1000000; // Durée en millisecondes - - saisieGrille.repaint(); // Redessiner la grille après la résolution - JOptionPane.showMessageDialog(frame, "Grille résolue avec succès en " + duration + " millisecondes !"); + // Créer et afficher la fenêtre principale avec la grille résolue + afficherFenetre(grille, true); } else { - JOptionPane.showMessageDialog(frame, "Impossible de résoudre la grille."); + JOptionPane.showMessageDialog(null, "Impossible de résoudre la grille."); } } }); - // Bouton "Réinitialiser" - JButton reinitialiserButton = new JButton("Réinitialiser"); - reinitialiserButton.addActionListener(new ActionListener() { + // Gestion du bouton "Manuel" + manuelButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - Reinitialiser reinitialiser = new Reinitialiser(grille, saisieGrille); - reinitialiser.actionPerformed(e); + 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."); + + // Créer et afficher la fenêtre principale pour la saisie manuelle + afficherFenetre(grille, false); } }); + } - // Ajout des boutons au panneau - boutonsPanel.add(resoudreButton); - boutonsPanel.add(reinitialiserButton); + // Fonction pour créer et afficher la fenêtre principale avec la grille spécifiée + private static void afficherFenetre(int[][] grille, boolean modeAutomatique) { + 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 - frame.add(saisieGrille, BorderLayout.CENTER); - frame.add(boutonsPanel, BorderLayout.SOUTH); + if (!modeAutomatique) { // Ajouter le bouton "Réinitialiser" seulement en mode manuel + JButton reinitialiserButton = new JButton("Réinitialiser"); + 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.setLocationRelativeTo(null); // Centrer la fenêtre sur l'écran diff --git a/OuvertureFichier.class b/OuvertureFichier.class new file mode 100644 index 0000000..b55b9a2 Binary files /dev/null and b/OuvertureFichier.class differ diff --git a/OuvertureFichier.java b/OuvertureFichier.java new file mode 100644 index 0000000..7da196c --- /dev/null +++ b/OuvertureFichier.java @@ -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; +} + + +}