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,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

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;
}
}