diff --git a/Main$2.class b/Main$2.class
deleted file mode 100644
index b37841e..0000000
Binary files a/Main$2.class and /dev/null differ
diff --git a/Main$3.class b/Main$3.class
deleted file mode 100644
index 39cf51e..0000000
Binary files a/Main$3.class and /dev/null differ
diff --git a/Main$4.class b/Main$4.class
deleted file mode 100644
index 2a54235..0000000
Binary files a/Main$4.class and /dev/null differ
diff --git a/SudokuGenerator.java b/SudokuGenerator.java
new file mode 100644
index 0000000..6ffa151
--- /dev/null
+++ b/SudokuGenerator.java
@@ -0,0 +1,114 @@
+import javax.swing.*;
+import java.io.*;
+
+public class SudokuGenerator {
+    public static int[][] generateGrid() {
+        // grille par défaut
+        int[][] grid = {
+            {0, 0, 0, 9, 0, 5, 0, 0, 4},
+            {5, 0, 3, 0, 0, 4, 0, 8, 7},
+            {0, 0, 0, 7, 0, 0, 6, 0, 3},
+            {9, 0, 0, 0, 3, 4, 0, 8, 0},
+            {0, 4, 0, 0, 1, 0, 0, 7, 0},
+            {0, 2, 0, 5, 7, 0, 0, 0, 6},
+            {4, 0, 9, 0, 0, 2, 0, 0, 0},
+            {6, 0, 7, 9, 0, 3, 0, 2, 1},
+            {2, 0, 0, 6, 5, 0, 0, 0, 0}
+        };
+
+        return grid;
+    }
+
+    public static int[][] readGridFromFile() {
+        int[][] grid = new int[9][9];
+        JFileChooser fileChooser = new JFileChooser();
+        int result = fileChooser.showOpenDialog(null);
+        if (result == JFileChooser.APPROVE_OPTION) {
+            File selectedFile = fileChooser.getSelectedFile();
+            try (BufferedReader reader = new BufferedReader(new FileReader(selectedFile))) {
+                for (int i = 0; i < 9; i++) {
+                    String line = reader.readLine();
+                    // Vérifier la longueur de la ligne lue
+                    if (line.length() != 9) {
+                        JOptionPane.showMessageDialog(null, "Invalid file format. Please select a file with correct Sudoku grid format.");
+                        return generateGrid(); // Charger la grille par défaut en cas d'erreur
+                    }
+                    for (int j = 0; j < 9; j++) {
+                        char ch = line.charAt(j);
+                        if (ch >= '1' && ch <= '9') {
+                            grid[i][j] = Character.getNumericValue(ch);
+                        } else {
+                            grid[i][j] = 0;
+                        }
+                    }
+                }
+                if (!isGridValid(grid)) {
+                    JOptionPane.showMessageDialog(null, "Invalid Sudoku grid. Loading default grid.");
+                    return generateGrid(); // Charger la grille par défaut en cas de grille invalide
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return grid;
+    }
+
+    // Méthode pour vérifier si la grille est valide
+    private static boolean isGridValid(int[][] grid) {
+        for (int i = 0; i < 9; i++) {
+            if (!isRowValid(grid, i) || !isColumnValid(grid, i) || !isRegionValid(grid, i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    // Méthode pour vérifier s'il n'y a pas de chiffres en double sur une ligne donnée
+    private static boolean isRowValid(int[][] grid, int row) {
+        boolean[] seen = new boolean[10]; // Tableau pour suivre les chiffres déjà rencontrés
+        for (int i = 0; i < 9; i++) {
+            int num = grid[row][i];
+            if (num != 0) {
+                if (seen[num]) {
+                    return false; // Le chiffre est déjà apparu sur cette ligne
+                }
+                seen[num] = true;
+            }
+        }
+        return true; // Aucun chiffre en double sur la ligne
+    }
+
+    // Méthode pour vérifier s'il n'y a pas de chiffres en double sur une colonne donnée
+    private static boolean isColumnValid(int[][] grid, int col) {
+        boolean[] seen = new boolean[10]; // Tableau pour suivre les chiffres déjà rencontrés
+        for (int i = 0; i < 9; i++) {
+            int num = grid[i][col];
+            if (num != 0) {
+                if (seen[num]) {
+                    return false; // Le chiffre est déjà apparu sur cette colonne
+                }
+                seen[num] = true;
+            }
+        }
+        return true; // Aucun chiffre en double sur la colonne
+    }
+
+    // Méthode pour vérifier s'il n'y a pas de chiffres en double dans une région donnée
+    private static boolean isRegionValid(int[][] grid, int region) {
+        int rowOffset = (region / 3) * 3;
+        int colOffset = (region % 3) * 3;
+        boolean[] seen = new boolean[10]; // Tableau pour suivre les chiffres déjà rencontrés
+        for (int i = rowOffset; i < rowOffset + 3; i++) {
+            for (int j = colOffset; j < colOffset + 3; j++) {
+                int num = grid[i][j];
+                if (num != 0) {
+                    if (seen[num]) {
+                        return false; // Le chiffre est déjà apparu dans cette région
+                    }
+                    seen[num] = true;
+                }
+            }
+        }
+        return true; // Aucun chiffre en double dans la région
+    }
+}