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.
+57 -28
View File
@@ -6,37 +6,69 @@ 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é.");
// 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
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");
JPanel boutonsPanel = new JPanel();
boutonsPanel.setLayout(new FlowLayout());
boutonsPanel.add(automatiqueButton);
boutonsPanel.add(manuelButton);
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) {
choixFrame.dispose(); // Fermer la fenêtre de choix
int[][] grille = GenerateurSudoku.genererGrille(); // Obtenir la grille par défaut int[][] grille = GenerateurSudoku.genererGrille(); // Obtenir la grille par défaut
System.out.println("Grille Sudoku générée avec succès."); System.out.println("Grille Sudoku générée avec succès.");
JFrame frame = new JFrame("Sudoku"); // Résoudre automatiquement le Sudoku
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SaisieGrille saisieGrille = new SaisieGrille(grille); // Utilisation de la classe SaisieGrille pour permettre la saisie des valeurs
// Panneau pour contenir les boutons
JPanel boutonsPanel = new JPanel();
boutonsPanel.setLayout(new FlowLayout());
// Bouton "Résoudre"
JButton resoudreButton = new JButton("Résoudre");
resoudreButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
long startTime = System.nanoTime(); // Temps avant la résolution
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"
manuelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent 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);
}
});
}
// 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
if (!modeAutomatique) { // Ajouter le bouton "Réinitialiser" seulement en mode manuel
JButton reinitialiserButton = new JButton("Réinitialiser"); JButton reinitialiserButton = new JButton("Réinitialiser");
reinitialiserButton.addActionListener(new ActionListener() { reinitialiserButton.addActionListener(new ActionListener() {
@Override @Override
@@ -46,13 +78,10 @@ public class Main {
} }
}); });
// Ajout des boutons au panneau frame.add(reinitialiserButton, BorderLayout.SOUTH); // Ajouter le bouton "Réinitialiser"
boutonsPanel.add(resoudreButton); }
boutonsPanel.add(reinitialiserButton);
// Ajout des composants au frame frame.add(saisieGrille, BorderLayout.CENTER); // Ajouter la grille à la fenêtre
frame.add(saisieGrille, BorderLayout.CENTER);
frame.add(boutonsPanel, BorderLayout.SOUTH);
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;
}
}