This commit is contained in:
Adrien DICK 2024-04-06 22:10:12 +02:00
parent c818eec943
commit ee478f0563
9 changed files with 83 additions and 27 deletions

BIN
Grilles/exemple.gri Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Main$3.class Normal file

Binary file not shown.

BIN
Main$4.class Normal file

Binary file not shown.

Binary file not shown.

View File

@ -6,37 +6,69 @@ public class Main {
public static void main(String[] args) {
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
System.out.println("Grille Sudoku générée avec succès.");
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
// 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
// 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"
// 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");
reinitialiserButton.addActionListener(new ActionListener() {
@Override
@ -46,13 +78,10 @@ public class Main {
}
});
// Ajout des boutons au panneau
boutonsPanel.add(resoudreButton);
boutonsPanel.add(reinitialiserButton);
frame.add(reinitialiserButton, BorderLayout.SOUTH); // Ajouter le bouton "Réinitialiser"
}
// Ajout des composants au frame
frame.add(saisieGrille, BorderLayout.CENTER);
frame.add(boutonsPanel, BorderLayout.SOUTH);
frame.add(saisieGrille, BorderLayout.CENTER); // Ajouter la grille à la fenêtre
frame.pack();
frame.setLocationRelativeTo(null); // Centrer la fenêtre sur l'écran

BIN
OuvertureFichier.class Normal file

Binary file not shown.

27
OuvertureFichier.java Normal file
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;
}
}