Menu Programme 2 + alogo sudoku auto + Ouverture fichier .gri
This commit is contained in:
parent
f28cb90255
commit
a5d270a9a1
85
Sudoku/grille.java
Normal file
85
Sudoku/grille.java
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class grille extends JComponent{
|
||||||
|
|
||||||
|
/*tableau de valeurs de la grille de sudoku*/
|
||||||
|
public static int[][] grid_values = null;
|
||||||
|
|
||||||
|
/*fonction pour afficher graphiquement la grille*/
|
||||||
|
public static void AfficherGrille (int[][] grille) {
|
||||||
|
/*paramètre de base de la fenetre*/
|
||||||
|
JFrame fenetre = new JFrame();
|
||||||
|
fenetre.setSize(900, 900);
|
||||||
|
fenetre.setLocationRelativeTo(null);
|
||||||
|
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
/*creation grille*/
|
||||||
|
GridLayout gestionnaire = new GridLayout(9, 9);
|
||||||
|
fenetre.setLayout(gestionnaire);
|
||||||
|
|
||||||
|
|
||||||
|
/*affichage de la grille*/
|
||||||
|
JTextField[][] case_modifiable = null;
|
||||||
|
JLabel[][] case_depart = null;
|
||||||
|
case_depart = new JLabel[9][9];
|
||||||
|
case_modifiable = new JTextField[9][9];
|
||||||
|
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
for (int j = 0; j < 9; j++) {
|
||||||
|
if ((grid_values[i][j]) == 0) {
|
||||||
|
case_modifiable[i][j] = new JTextField("", 1);
|
||||||
|
case_modifiable[i][j].setFont(new Font("Arial", Font.PLAIN, 30));
|
||||||
|
case_modifiable[i][j].setHorizontalAlignment(JTextField.CENTER);
|
||||||
|
fenetre.add(case_modifiable[i][j]);
|
||||||
|
} else {
|
||||||
|
case_depart[i][j] = new JLabel(String.valueOf(grid_values[i][j]));
|
||||||
|
case_depart[i][j].setFont(new Font("Arial", Font.PLAIN, 30));
|
||||||
|
case_depart[i][j].setHorizontalAlignment(JTextField.CENTER);
|
||||||
|
fenetre.add(case_depart[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*affichage fenetre*/
|
||||||
|
fenetre.setVisible(true);
|
||||||
|
|
||||||
|
/*System.out.println(grid[0][0].getText());*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*fonction pour passer d'un fichier.gri à un tableau de valeur*/
|
||||||
|
public static int[][] ChargerGrille(String cheminFichier){
|
||||||
|
try {
|
||||||
|
FileInputStream fs = new FileInputStream(cheminFichier);
|
||||||
|
DataInputStream fichier = new DataInputStream(fs);
|
||||||
|
|
||||||
|
grid_values = new int[9][9];
|
||||||
|
String string_values = "";
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
for (int a = 0; a < 9 ; a++ ) {
|
||||||
|
String ligne = String.valueOf(fichier.readInt());
|
||||||
|
while (ligne.length() < 9){
|
||||||
|
ligne = "0" + ligne;
|
||||||
|
}
|
||||||
|
string_values = string_values + ligne;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
for (int j = 0; j < 9; j++) {
|
||||||
|
grid_values[i][j] = Character.getNumericValue(string_values.charAt(index));
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
fs.close();
|
||||||
|
return grid_values;
|
||||||
|
}catch(IOException e){
|
||||||
|
System.err.println("erreur fermeture du fichier");
|
||||||
|
}
|
||||||
|
}catch(IOException e) {
|
||||||
|
System.err.println("erreur ouverture du fichier");
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
BIN
Sudoku/grille/exemple.gri
Normal file
BIN
Sudoku/grille/exemple.gri
Normal file
Binary file not shown.
BIN
Sudoku/img/grille_sudoku.png
Normal file
BIN
Sudoku/img/grille_sudoku.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
BIN
Sudoku/img/grille_sudoku.psd
Normal file
BIN
Sudoku/img/grille_sudoku.psd
Normal file
Binary file not shown.
8
Sudoku/main.java
Normal file
8
Sudoku/main.java
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
menu.menuFenetre();
|
||||||
|
}
|
||||||
|
}
|
119
Sudoku/menu.java
Normal file
119
Sudoku/menu.java
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class menu {
|
||||||
|
|
||||||
|
private static String cheminFichier = null;
|
||||||
|
private static boolean ResolutionManuel = true;
|
||||||
|
|
||||||
|
public static void menuFenetre() {
|
||||||
|
/*fenetre*/
|
||||||
|
JFrame fenetre = new JFrame();
|
||||||
|
fenetre.setSize(500, 250);
|
||||||
|
fenetre.setTitle("Sudoku Resolver (By Wilfried BRIGITTE)");
|
||||||
|
fenetre.setResizable(false);
|
||||||
|
fenetre.setLocationRelativeTo(null);
|
||||||
|
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
GridLayout gestionnaire = new GridLayout(5,1);
|
||||||
|
fenetre.setLayout(gestionnaire);
|
||||||
|
|
||||||
|
/*composants G*/
|
||||||
|
|
||||||
|
JLabel titre = new JLabel("Sudoku Resolver");
|
||||||
|
titre.setHorizontalAlignment(JLabel.CENTER);
|
||||||
|
titre.setFont(new Font("Arial", Font.PLAIN, 25));
|
||||||
|
fenetre.add(titre, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
JPanel ligne2 = new JPanel();
|
||||||
|
ButtonGroup groupModeResolution = new ButtonGroup();
|
||||||
|
JRadioButton manuel = new JRadioButton("manuel");
|
||||||
|
JRadioButton auto = new JRadioButton("auto");
|
||||||
|
groupModeResolution.add(manuel);
|
||||||
|
groupModeResolution.add(auto);
|
||||||
|
ligne2.add(manuel);
|
||||||
|
ligne2.add(auto);
|
||||||
|
manuel.setSelected(true);
|
||||||
|
fenetre.add(ligne2, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
|
||||||
|
JPanel ligne3 = new JPanel();
|
||||||
|
JButton ouvrir = new JButton("Ouvrir");
|
||||||
|
JLabel nomFichier = new JLabel("Fichier ouvert : ");
|
||||||
|
ligne3.add(ouvrir);
|
||||||
|
ligne3.add(nomFichier);
|
||||||
|
fenetre.add(ligne3, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
JPanel ligne4 = new JPanel();
|
||||||
|
JButton lancer = new JButton("Lancer");
|
||||||
|
JButton quitter = new JButton("Quitter");
|
||||||
|
ligne4.add(lancer);
|
||||||
|
ligne4.add(quitter);
|
||||||
|
fenetre.add(ligne4, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
JLabel InfoLogiciel = new JLabel(" Info : Tout est normal");
|
||||||
|
InfoLogiciel.setHorizontalAlignment(JLabel.LEFT);
|
||||||
|
InfoLogiciel.setFont(new Font("Arial", Font.PLAIN, 11));
|
||||||
|
fenetre.add(InfoLogiciel);
|
||||||
|
|
||||||
|
/*affichage*/
|
||||||
|
fenetre.setVisible(true);
|
||||||
|
|
||||||
|
/*evenements*/
|
||||||
|
ouvrir.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
try {
|
||||||
|
JFileChooser filechooser = new JFileChooser();
|
||||||
|
filechooser.setCurrentDirectory(new File("./grille"));
|
||||||
|
int result = filechooser.showOpenDialog(null);
|
||||||
|
if (result == JFileChooser.APPROVE_OPTION) {
|
||||||
|
File selectedFile = filechooser.getSelectedFile();
|
||||||
|
nomFichier.setText("Fichier ouvert : " + selectedFile.getName());
|
||||||
|
cheminFichier = selectedFile.getAbsolutePath();
|
||||||
|
InfoLogiciel.setText(" Info : Tout est normal");
|
||||||
|
InfoLogiciel.setForeground(Color.BLACK);
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.err.println("Erreur selection du fichier");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
lancer.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e2) {
|
||||||
|
if(cheminFichier != null){
|
||||||
|
if (ResolutionManuel == true) {
|
||||||
|
fenetre.dispose();
|
||||||
|
grille.AfficherGrille(grille.ChargerGrille(cheminFichier));
|
||||||
|
} else {
|
||||||
|
grille.AfficherGrille(resolveurGrille.resoudreGrille(grille.ChargerGrille(cheminFichier)));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
InfoLogiciel.setText(" Info : Erreur : Veuillez selectionner un fichier .gri");
|
||||||
|
InfoLogiciel.setForeground(Color.RED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
quitter.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e3) {
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
manuel.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
ResolutionManuel = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
auto.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
ResolutionManuel = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
77
Sudoku/resolveurGrille.java
Normal file
77
Sudoku/resolveurGrille.java
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
public class resolveurGrille {
|
||||||
|
|
||||||
|
private static int[][] solution = new int[9][9];
|
||||||
|
private static boolean stop = false;
|
||||||
|
|
||||||
|
public static int[][] resoudreGrille(int[][] grille) {
|
||||||
|
/*remise à zéro de la solution*/
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
for (int j = 0; j < 9; j++) {
|
||||||
|
solution[i][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Réinitialiser la valeur de stop à chaque début de résolution*/
|
||||||
|
stop = false;
|
||||||
|
resoudreSudoku(grille);
|
||||||
|
return solution;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void resoudreSudoku(int[][] grille) {
|
||||||
|
/*parcourage la grille*/
|
||||||
|
for (int row = 0; row < 9; row++) {
|
||||||
|
for (int col = 0; col < 9; col++) {
|
||||||
|
if (grille[row][col] == 0) {
|
||||||
|
/*essayer les chiffres de 1 a 9 pour la case vide*/
|
||||||
|
for (int num = 1; num <= 9; num++) {
|
||||||
|
if (isValid(grille, row, col, num)) {
|
||||||
|
grille[row][col] = num;
|
||||||
|
resoudreSudoku(grille);
|
||||||
|
if (stop) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
grille[row][col] = 0; /*réinitialiser la case si la solution n'est pas trouvée*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return; /* Si aucune solution trouvée à cette étape on s'arrêtee*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*copier la grille résolue dans la solution*/
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
System.arraycopy(grille[i], 0, solution[i], 0, 9);
|
||||||
|
}
|
||||||
|
stop = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Méthode pour vérifier la validité d'un chiffre dans une case donnée*/
|
||||||
|
private static boolean isValid(int[][] grille, int row, int col, int num) {
|
||||||
|
/*Vérifier la ligne*/
|
||||||
|
for (int x = 0; x < 9; x++) {
|
||||||
|
if (grille[row][x] == num) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Vérifier la colonne*/
|
||||||
|
for (int x = 0; x < 9; x++) {
|
||||||
|
if (grille[x][col] == num) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Vérifier la sous-grille 3x3*/
|
||||||
|
int startRow = row - row % 3;
|
||||||
|
int startCol = col - col % 3;
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
for (int j = 0; j < 3; j++) {
|
||||||
|
if (grille[i + startRow][j + startCol] == num) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user