petite correction + fin des commentaires
This commit is contained in:
parent
e1836143cd
commit
43e3c1634a
@ -2,33 +2,45 @@ import javax.swing.*;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.FocusListener;
|
|
||||||
import java.awt.event.FocusEvent;
|
import java.awt.event.FocusEvent;
|
||||||
import java.awt.event.FocusAdapter;
|
import java.awt.event.FocusAdapter;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import javax.swing.border.Border;
|
|
||||||
import javax.swing.text.PlainDocument;
|
|
||||||
import javax.swing.text.AttributeSet;
|
|
||||||
import javax.swing.text.BadLocationException;
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* La classe Grille est une composante Swing pour représenter une grille de Sudoku.
|
||||||
|
*
|
||||||
|
* @author Julian GALLEGO
|
||||||
|
* @author Wilfried BRIGITTE
|
||||||
|
*/
|
||||||
|
public class Grille extends JComponent {
|
||||||
|
private static JLabel etat_exportation = new JLabel();
|
||||||
|
|
||||||
public class grille extends JComponent{
|
/**
|
||||||
private static JLabel etat_exportation = new JLabel();
|
* Tableau des valeurs de la grille de Sudoku.
|
||||||
|
*/
|
||||||
|
public static int[][] grid_values = null;
|
||||||
|
|
||||||
/*tableau de valeurs de la grille de sudoku*/
|
/**
|
||||||
public static int[][] grid_values = null;
|
* Panneau pour la grille.
|
||||||
|
*/
|
||||||
|
public static JPanel place_grille = new JPanel();
|
||||||
|
|
||||||
/*Panneau pour la grille */
|
/**
|
||||||
public static JPanel place_grille = new JPanel();
|
* Fenêtre de l'application.
|
||||||
|
*/
|
||||||
|
public static JFrame fenetre = new JFrame();
|
||||||
|
|
||||||
/*variable de la fenetre*/
|
/**
|
||||||
|
* Affiche graphiquement la grille de Sudoku.
|
||||||
public static JFrame fenetre = new JFrame();
|
*
|
||||||
|
* @param grille La grille de Sudoku à afficher.
|
||||||
/*fonction pour afficher graphiquement la grille*/
|
* @param editable Indique si la grille est éditable.
|
||||||
|
* @param resolutionManuel Indique si la résolution est manuelle.
|
||||||
|
* @param duree La durée de résolution (en nanosecondes).
|
||||||
|
*/
|
||||||
public static void AfficherGrille (int[][] grille, boolean editable, boolean resolutionManuel, long duree) {
|
public static void AfficherGrille (int[][] grille, boolean editable, boolean resolutionManuel, long duree) {
|
||||||
/*paramètre de base de la fenetre*/
|
//paramètre de base de la fenetre
|
||||||
fenetre.setSize(900, 950);
|
fenetre.setSize(900, 950);
|
||||||
fenetre.setResizable(false);
|
fenetre.setResizable(false);
|
||||||
fenetre.setLocationRelativeTo(null);
|
fenetre.setLocationRelativeTo(null);
|
||||||
@ -36,13 +48,13 @@ public class grille extends JComponent{
|
|||||||
|
|
||||||
place_grille.setSize(900,900);
|
place_grille.setSize(900,900);
|
||||||
|
|
||||||
/*creation grille*/
|
//creation grille
|
||||||
GridLayout gestionnaire = new GridLayout(9,9,-2,-2);
|
GridLayout gestionnaire = new GridLayout(9,9,-2,-2);
|
||||||
place_grille.setLayout(gestionnaire);
|
place_grille.setLayout(gestionnaire);
|
||||||
|
|
||||||
JTextField[][] case_editable = null;
|
JTextField[][] case_editable = null;
|
||||||
case_editable = new JTextField[9][9];
|
case_editable = new JTextField[9][9];
|
||||||
/*si la grille peut etre entierement éditée (dans le cas du programme1*/
|
//si la grille peut etre entierement éditée (dans le cas du programme1
|
||||||
if(editable){
|
if(editable){
|
||||||
|
|
||||||
for (int ligne = 0; ligne < 9; ligne++) {
|
for (int ligne = 0; ligne < 9; ligne++) {
|
||||||
@ -111,12 +123,12 @@ public class grille extends JComponent{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*bouton(s) grille(s)*/
|
//bouton(s) grille(s)
|
||||||
JButton verifier = null;
|
JButton verifier = null;
|
||||||
JButton exporter = null;
|
JButton exporter = null;
|
||||||
JPanel bouton_grille = new JPanel();
|
JPanel bouton_grille = new JPanel();
|
||||||
|
|
||||||
/*affichage des boutons en fonction du programme lancé*/
|
//affichage des boutons en fonction du programme lancé
|
||||||
if(editable){
|
if(editable){
|
||||||
bouton_grille.add(etat_exportation);
|
bouton_grille.add(etat_exportation);
|
||||||
exporter = new JButton("exporter");
|
exporter = new JButton("exporter");
|
||||||
@ -136,10 +148,10 @@ public class grille extends JComponent{
|
|||||||
fenetre.add(bouton_grille,BorderLayout.SOUTH);
|
fenetre.add(bouton_grille,BorderLayout.SOUTH);
|
||||||
fenetre.add(place_grille, BorderLayout.CENTER);
|
fenetre.add(place_grille, BorderLayout.CENTER);
|
||||||
|
|
||||||
/*affichage fenetre*/
|
//affichage fenetre
|
||||||
fenetre.setVisible(true);
|
fenetre.setVisible(true);
|
||||||
|
|
||||||
/*verification si un chiffre peut être placé à un endroit*/
|
//verification si un chiffre peut être placé à un endroit
|
||||||
for (int ligne = 0; ligne < 9; ligne++) {
|
for (int ligne = 0; ligne < 9; ligne++) {
|
||||||
for (int col = 0; col < 9; col++) {
|
for (int col = 0; col < 9; col++) {
|
||||||
final int finalLigne = ligne;
|
final int finalLigne = ligne;
|
||||||
@ -173,17 +185,27 @@ public class grille extends JComponent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*événement des boutons*/
|
//événement des boutons
|
||||||
if (verifier != null) { /* Vérification pour s'assurer que verifier a été initialisé */
|
if (verifier != null) { // Vérification pour s'assurer que verifier a été initialisé
|
||||||
verifier.addActionListener(new ActionListener() {
|
verifier.addActionListener(new ActionListener() {
|
||||||
|
/**
|
||||||
|
* verifie votre solution en appuyant sur le bouton verifier
|
||||||
|
*
|
||||||
|
* @param verifier L'évènement d'action.
|
||||||
|
*/
|
||||||
public void actionPerformed(ActionEvent verifier) {
|
public void actionPerformed(ActionEvent verifier) {
|
||||||
VerificationGrilleFini();
|
VerificationGrilleFini();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exporter != null) { /* Vérification pour s'assurer que exporter a été initialisé */
|
if (exporter != null) { // Vérification pour s'assurer que exporter a été initialisé
|
||||||
exporter.addActionListener(new ActionListener() {
|
exporter.addActionListener(new ActionListener() {
|
||||||
|
/**
|
||||||
|
* permet d'exporter votre grille édité.
|
||||||
|
*
|
||||||
|
* @param exporeter
|
||||||
|
*/
|
||||||
public void actionPerformed(ActionEvent exporter) {
|
public void actionPerformed(ActionEvent exporter) {
|
||||||
if (!(resolveurGrille.resoudreSudoku(GrilleActuelle()))){
|
if (!(resolveurGrille.resoudreSudoku(GrilleActuelle()))){
|
||||||
etat_exportation.setHorizontalAlignment(SwingConstants.LEFT);
|
etat_exportation.setHorizontalAlignment(SwingConstants.LEFT);
|
||||||
@ -199,7 +221,12 @@ public class grille extends JComponent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*fonction pour passer d'un fichier.gri à un tableau de valeur*/
|
/**
|
||||||
|
* Charge une grille à partir d'un fichier.
|
||||||
|
*
|
||||||
|
* @param cheminFichier Le chemin du fichier contenant la grille.
|
||||||
|
* @return Un tableau représentant la grille.
|
||||||
|
*/
|
||||||
public static int[][] ChargerGrille(String cheminFichier){
|
public static int[][] ChargerGrille(String cheminFichier){
|
||||||
try {
|
try {
|
||||||
FileInputStream fs = new FileInputStream(cheminFichier);
|
FileInputStream fs = new FileInputStream(cheminFichier);
|
||||||
@ -236,7 +263,11 @@ public class grille extends JComponent{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*fonction pour exporter une grille en fichier .gri*/
|
/**
|
||||||
|
* Exporte une grille vers un fichier.
|
||||||
|
*
|
||||||
|
* @param grille La grille à exporter.
|
||||||
|
*/
|
||||||
public static void ExporterGrille(int[][] grille){
|
public static void ExporterGrille(int[][] grille){
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -270,7 +301,11 @@ public class grille extends JComponent{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*fonction pour récupérer les valeurs ACTUELLES de la grille est les placer dans un tableau*/
|
/**
|
||||||
|
* Récupère les valeurs actuelles de la grille et les place dans un tableau.
|
||||||
|
*
|
||||||
|
* @return Un tableau représentant la grille actuelle.
|
||||||
|
*/
|
||||||
public static int[][] GrilleActuelle(){
|
public static int[][] GrilleActuelle(){
|
||||||
int[][] grilleActuelle = new int[9][9];
|
int[][] grilleActuelle = new int[9][9];
|
||||||
|
|
||||||
@ -291,7 +326,11 @@ public class grille extends JComponent{
|
|||||||
return grilleActuelle;
|
return grilleActuelle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*fonction pour verifier si la grille actuelle correspond à la grille trouvé en solution*/
|
/**
|
||||||
|
* Vérifie si la grille actuelle correspond à la grille résolue.
|
||||||
|
*
|
||||||
|
* @return true si la grille est résolue correctement, sinon false.
|
||||||
|
*/
|
||||||
public static boolean VerificationGrilleFini(){
|
public static boolean VerificationGrilleFini(){
|
||||||
int[][] soluce_de_la_grille = new int[9][9];
|
int[][] soluce_de_la_grille = new int[9][9];
|
||||||
soluce_de_la_grille = resolveurGrille.resoudreGrille(grid_values);
|
soluce_de_la_grille = resolveurGrille.resoudreGrille(grid_values);
|
@ -2,6 +2,13 @@ import javax.swing.text.PlainDocument;
|
|||||||
import javax.swing.text.AttributeSet;
|
import javax.swing.text.AttributeSet;
|
||||||
import javax.swing.text.BadLocationException;
|
import javax.swing.text.BadLocationException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cette classe limite le nombre de caractères à 4 et limite les caractères a des chiffres
|
||||||
|
* pour les JTextField
|
||||||
|
*
|
||||||
|
* @author Julian GALLEGO
|
||||||
|
* @author Wilfried BRIGITTE
|
||||||
|
*/
|
||||||
public class JTextFieldCharLimit extends PlainDocument
|
public class JTextFieldCharLimit extends PlainDocument
|
||||||
{
|
{
|
||||||
private int max;
|
private int max;
|
||||||
@ -9,6 +16,15 @@ public class JTextFieldCharLimit extends PlainDocument
|
|||||||
super();
|
super();
|
||||||
this.max = max;
|
this.max = max;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vérifie si le texte répond aux exigences
|
||||||
|
*
|
||||||
|
* @param offset L'offset auquel insérer le texte.
|
||||||
|
* @param text La chaîne de texte à insérer.
|
||||||
|
* @param attr Les attributs à appliquer au texte inséré.
|
||||||
|
* @throws BadLocationException Si l'offset est invalide.
|
||||||
|
*/
|
||||||
public void insertString(int offset, String text, AttributeSet attr) throws BadLocationException {
|
public void insertString(int offset, String text, AttributeSet attr) throws BadLocationException {
|
||||||
if (text == null){
|
if (text == null){
|
||||||
return;
|
return;
|
||||||
@ -17,7 +33,7 @@ public class JTextFieldCharLimit extends PlainDocument
|
|||||||
sb.append(getText(0, getLength()));
|
sb.append(getText(0, getLength()));
|
||||||
sb.insert(offset, text);
|
sb.insert(offset, text);
|
||||||
|
|
||||||
/* Vérifier si le texte ne contient que des chiffres de 1 à 9 et si il ne depasse pas 4 caractères */
|
// Vérifier si le texte ne contient que des chiffres de 1 à 9 et si il ne depasse pas 4 caractères
|
||||||
if (sb.length() <= max && sb.toString().matches("[1-9]*")) {
|
if (sb.length() <= max && sb.toString().matches("[1-9]*")) {
|
||||||
super.insertString(offset, text, attr);
|
super.insertString(offset, text, attr);
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,14 @@ import javax.swing.*;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* La classe JeuFini affiche une fenêtre de fin de jeu pour un Sudoku résolu.
|
||||||
|
*
|
||||||
|
* @author Julian GALLEGO
|
||||||
|
* @author Wilfried BRIGITTE
|
||||||
|
*/
|
||||||
public class JeuFini {
|
public class JeuFini {
|
||||||
/*afficher la fenetre de fin*/
|
// Créer une nouvelle fenêtre
|
||||||
public static void JeuFini(){
|
public static void JeuFini(){
|
||||||
JFrame fenetre = new JFrame();
|
JFrame fenetre = new JFrame();
|
||||||
fenetre.setSize(500, 200);
|
fenetre.setSize(500, 200);
|
||||||
@ -12,23 +18,29 @@ public class JeuFini {
|
|||||||
fenetre.setLocationRelativeTo(null);
|
fenetre.setLocationRelativeTo(null);
|
||||||
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
|
// Utiliser un gestionnaire de disposition pour organiser les composants
|
||||||
GridLayout gestionnaire = new GridLayout(2,1);
|
GridLayout gestionnaire = new GridLayout(2,1);
|
||||||
fenetre.setLayout(gestionnaire);
|
fenetre.setLayout(gestionnaire);
|
||||||
|
|
||||||
|
// Ajouter un texte à la fenêtre
|
||||||
JLabel titre = new JLabel("Bravo vous avez résolu le Sudoku");
|
JLabel titre = new JLabel("Bravo vous avez résolu le Sudoku");
|
||||||
titre.setHorizontalAlignment(JLabel.CENTER);
|
titre.setHorizontalAlignment(JLabel.CENTER);
|
||||||
titre.setFont(new Font("Arial", Font.PLAIN, 30));
|
titre.setFont(new Font("Arial", Font.PLAIN, 30));
|
||||||
fenetre.add(titre, BorderLayout.CENTER);
|
fenetre.add(titre, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
// Ajouter un bouton "Quitter"
|
||||||
JPanel ligne2 = new JPanel();
|
JPanel ligne2 = new JPanel();
|
||||||
JButton quitter = new JButton("Quitter");
|
JButton quitter = new JButton("Quitter");
|
||||||
ligne2.add(quitter);
|
ligne2.add(quitter);
|
||||||
fenetre.add(ligne2, BorderLayout.CENTER);
|
fenetre.add(ligne2, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
// Rendre la fenêtre visible
|
||||||
fenetre.setVisible(true);
|
fenetre.setVisible(true);
|
||||||
|
|
||||||
|
// Définir un évènement pour le bouton "Quitter"
|
||||||
quitter.addActionListener(new ActionListener() {
|
quitter.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
// Quitter l'application lorsque le bouton "Quitter" est cliqué
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -14,13 +14,13 @@ mainProgramme2.class : mainProgramme2.java menuProgramme2.class
|
|||||||
mainProgramme1.class : mainProgramme1.java menuProgramme1.class
|
mainProgramme1.class : mainProgramme1.java menuProgramme1.class
|
||||||
${JC} ${JCFLAGS} mainProgramme1.java
|
${JC} ${JCFLAGS} mainProgramme1.java
|
||||||
|
|
||||||
grille.class : grille.java resolveurGrille.class JTextFieldCharLimit.class JeuFini.class
|
Grille.class : Grille.java resolveurGrille.class JTextFieldCharLimit.class JeuFini.class
|
||||||
${JC} ${JCFLAGS} grille.java
|
${JC} ${JCFLAGS} Grille.java
|
||||||
|
|
||||||
menuProgramme2.class : menuProgramme2.java resolveurGrille.class grille.class
|
menuProgramme2.class : menuProgramme2.java resolveurGrille.class Grille.class
|
||||||
${JC} ${JCFLAGS} menuProgramme2.java
|
${JC} ${JCFLAGS} menuProgramme2.java
|
||||||
|
|
||||||
menuProgramme1.class : menuProgramme1.java resolveurGrille.class grille.class
|
menuProgramme1.class : menuProgramme1.java resolveurGrille.class Grille.class
|
||||||
${JC} ${JCFLAGS} menuProgramme1.java
|
${JC} ${JCFLAGS} menuProgramme1.java
|
||||||
|
|
||||||
resolveurGrille.class : resolveurGrille.java
|
resolveurGrille.class : resolveurGrille.java
|
||||||
@ -34,10 +34,10 @@ JeuFini.class : JeuFini.java
|
|||||||
|
|
||||||
### REGLES OPTIONNELLES ###
|
### REGLES OPTIONNELLES ###
|
||||||
|
|
||||||
run1 : mainProgramme1.class
|
editeur : mainProgramme1.class
|
||||||
${JVM} ${JVMFLAGS} mainProgramme1
|
${JVM} ${JVMFLAGS} mainProgramme1
|
||||||
|
|
||||||
run2 : mainProgramme2.class
|
resolveur : mainProgramme2.class
|
||||||
${JVM} ${JVMFLAGS} mainProgramme2
|
${JVM} ${JVMFLAGS} mainProgramme2
|
||||||
|
|
||||||
clean :
|
clean :
|
||||||
|
@ -1,6 +1,17 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Classe principale pour exécuter le programme 1.
|
||||||
|
*
|
||||||
|
* @author Julian GALLEGO
|
||||||
|
* @author Wilfried BRIGITTE
|
||||||
|
*/
|
||||||
public class mainProgramme1 {
|
public class mainProgramme1 {
|
||||||
public static void main(String[] args) {
|
/**
|
||||||
menuProgramme1.menuProgramme1();
|
* Méthode principale pour exécuter le programme 1.
|
||||||
}
|
*
|
||||||
|
* @param args Les arguments de la ligne de commande.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
menuProgramme1.menuProgramme1();
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,6 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Classe principale pour exécuter le programme 2.
|
||||||
|
*
|
||||||
|
* @author Julian GALLEGO
|
||||||
|
* @author Wilfried BRIGITTE
|
||||||
|
*/
|
||||||
public class mainProgramme2 {
|
public class mainProgramme2 {
|
||||||
public static void main(String[] args) {
|
/**
|
||||||
menuProgramme2.menuProgramme2();
|
* Méthode principale pour exécuter le programme 2.
|
||||||
}
|
*
|
||||||
|
* @param args Les arguments de la ligne de commande.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
menuProgramme2.menuProgramme2();
|
||||||
|
}
|
||||||
}
|
}
|
@ -3,13 +3,22 @@ import java.awt.*;
|
|||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu pour le Programme 1 (Créateur de Sudoku).
|
||||||
|
*
|
||||||
|
* @author Julian GALLEGO
|
||||||
|
* @author Wilfried BRIGITTE
|
||||||
|
*/
|
||||||
public class menuProgramme1 {
|
public class menuProgramme1 {
|
||||||
|
|
||||||
private static String cheminFichier = null;
|
private static String cheminFichier = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Affiche le menu du Programme 1 qui permet créer et d'editer une grille .
|
||||||
|
*/
|
||||||
public static void menuProgramme1() {
|
public static void menuProgramme1() {
|
||||||
/*fenetre*/
|
|
||||||
|
// création de la fenêtre
|
||||||
JFrame fenetre = new JFrame();
|
JFrame fenetre = new JFrame();
|
||||||
fenetre.setSize(500, 200);
|
fenetre.setSize(500, 200);
|
||||||
fenetre.setTitle("Sudoku Creator (By Wilfried BRIGITTE & Julian GALLEGO)");
|
fenetre.setTitle("Sudoku Creator (By Wilfried BRIGITTE & Julian GALLEGO)");
|
||||||
@ -19,8 +28,7 @@ public class menuProgramme1 {
|
|||||||
GridLayout gestionnaire = new GridLayout(4,1);
|
GridLayout gestionnaire = new GridLayout(4,1);
|
||||||
fenetre.setLayout(gestionnaire);
|
fenetre.setLayout(gestionnaire);
|
||||||
|
|
||||||
/*composants G*/
|
//composants graphique
|
||||||
|
|
||||||
JLabel titre = new JLabel("Sudoku Creator");
|
JLabel titre = new JLabel("Sudoku Creator");
|
||||||
titre.setHorizontalAlignment(JLabel.CENTER);
|
titre.setHorizontalAlignment(JLabel.CENTER);
|
||||||
titre.setFont(new Font("Arial", Font.PLAIN, 25));
|
titre.setFont(new Font("Arial", Font.PLAIN, 25));
|
||||||
@ -47,11 +55,16 @@ public class menuProgramme1 {
|
|||||||
InfoLogiciel.setFont(new Font("Arial", Font.PLAIN, 11));
|
InfoLogiciel.setFont(new Font("Arial", Font.PLAIN, 11));
|
||||||
fenetre.add(InfoLogiciel);
|
fenetre.add(InfoLogiciel);
|
||||||
|
|
||||||
/*affichage*/
|
//affichage de la fenêtre
|
||||||
fenetre.setVisible(true);
|
fenetre.setVisible(true);
|
||||||
|
|
||||||
/*evenements*/
|
//Evenements
|
||||||
ouvrir.addActionListener(new ActionListener() {
|
ouvrir.addActionListener(new ActionListener() {
|
||||||
|
/**
|
||||||
|
* Ouvre un sélecteur de fichiers pour choisir un fichier de grille à charger.
|
||||||
|
*
|
||||||
|
* @param e L'événement d'action.
|
||||||
|
*/
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
try {
|
try {
|
||||||
JFileChooser filechooser = new JFileChooser();
|
JFileChooser filechooser = new JFileChooser();
|
||||||
@ -71,6 +84,11 @@ public class menuProgramme1 {
|
|||||||
});
|
});
|
||||||
|
|
||||||
editerGrilleVierge.addActionListener(new ActionListener(){
|
editerGrilleVierge.addActionListener(new ActionListener(){
|
||||||
|
/**
|
||||||
|
* Crée une grille vide et l'affiche pour l'édition.
|
||||||
|
*
|
||||||
|
* @param e4 L'événement d'action.
|
||||||
|
*/
|
||||||
public void actionPerformed(ActionEvent e4){
|
public void actionPerformed(ActionEvent e4){
|
||||||
int[][] grille_vide = null;
|
int[][] grille_vide = null;
|
||||||
grille_vide = new int[9][9];
|
grille_vide = new int[9][9];
|
||||||
@ -82,23 +100,33 @@ public class menuProgramme1 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fenetre.dispose();
|
fenetre.dispose();
|
||||||
grille.AfficherGrille(grille_vide, true, false, 0);
|
Grille.AfficherGrille(grille_vide, true, false, 0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
editerGrilleSelectionner.addActionListener(new ActionListener(){
|
editerGrilleSelectionner.addActionListener(new ActionListener(){
|
||||||
|
/**
|
||||||
|
* Charge une grille à partir du fichier sélectionné et l'affiche pour l'édition.
|
||||||
|
*
|
||||||
|
* @param e4 L'événement d'action.
|
||||||
|
*/
|
||||||
public void actionPerformed(ActionEvent e4){
|
public void actionPerformed(ActionEvent e4){
|
||||||
if (cheminFichier == null){
|
if (cheminFichier == null){
|
||||||
InfoLogiciel.setText(" Info : Erreur : Veuillez selectionner un fichier .gri");
|
InfoLogiciel.setText(" Info : Erreur : Veuillez selectionner un fichier .gri");
|
||||||
InfoLogiciel.setForeground(Color.RED);
|
InfoLogiciel.setForeground(Color.RED);
|
||||||
}else{
|
}else{
|
||||||
fenetre.dispose();
|
fenetre.dispose();
|
||||||
grille.AfficherGrille(grille.ChargerGrille(cheminFichier), true, false, 0);
|
Grille.AfficherGrille(Grille.ChargerGrille(cheminFichier), true, false, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
quitter.addActionListener(new ActionListener() {
|
quitter.addActionListener(new ActionListener() {
|
||||||
|
/**
|
||||||
|
* Ferme l'application.
|
||||||
|
*
|
||||||
|
* @param e3 L'événement d'action.
|
||||||
|
*/
|
||||||
public void actionPerformed(ActionEvent e3) {
|
public void actionPerformed(ActionEvent e3) {
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
|
@ -3,14 +3,29 @@ import java.awt.*;
|
|||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu pour le Programme 2 (Résolveur de Sudoku).
|
||||||
|
*
|
||||||
|
* @author Julian GALLEGO
|
||||||
|
* @author Wilfried BRIGITTE
|
||||||
|
*/
|
||||||
public class menuProgramme2 {
|
public class menuProgramme2 {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* designe le chemin du fichier
|
||||||
|
*/
|
||||||
private static String cheminFichier = null;
|
private static String cheminFichier = null;
|
||||||
|
/**
|
||||||
|
* permet de savoir si l'utilisateur veut resoudre le sudoku lui même
|
||||||
|
* ou si il veut voir la solution
|
||||||
|
*/
|
||||||
private static boolean ResolutionManuel = true;
|
private static boolean ResolutionManuel = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Affiche le menu du Programme 2.
|
||||||
|
*/
|
||||||
public static void menuProgramme2() {
|
public static void menuProgramme2() {
|
||||||
/*fenetre*/
|
//Création de la fenêtre
|
||||||
JFrame fenetre = new JFrame();
|
JFrame fenetre = new JFrame();
|
||||||
fenetre.setSize(500, 250);
|
fenetre.setSize(500, 250);
|
||||||
fenetre.setTitle("Sudoku Resolver (By Wilfried BRIGITTE & Julian GALLEGO)");
|
fenetre.setTitle("Sudoku Resolver (By Wilfried BRIGITTE & Julian GALLEGO)");
|
||||||
@ -20,8 +35,7 @@ public class menuProgramme2 {
|
|||||||
GridLayout gestionnaire = new GridLayout(5,1);
|
GridLayout gestionnaire = new GridLayout(5,1);
|
||||||
fenetre.setLayout(gestionnaire);
|
fenetre.setLayout(gestionnaire);
|
||||||
|
|
||||||
/*composants G*/
|
//Composants graphique
|
||||||
|
|
||||||
JLabel titre = new JLabel("Sudoku Resolver");
|
JLabel titre = new JLabel("Sudoku Resolver");
|
||||||
titre.setHorizontalAlignment(JLabel.CENTER);
|
titre.setHorizontalAlignment(JLabel.CENTER);
|
||||||
titre.setFont(new Font("Arial", Font.PLAIN, 25));
|
titre.setFont(new Font("Arial", Font.PLAIN, 25));
|
||||||
@ -58,11 +72,16 @@ public class menuProgramme2 {
|
|||||||
InfoLogiciel.setFont(new Font("Arial", Font.PLAIN, 11));
|
InfoLogiciel.setFont(new Font("Arial", Font.PLAIN, 11));
|
||||||
fenetre.add(InfoLogiciel);
|
fenetre.add(InfoLogiciel);
|
||||||
|
|
||||||
/*affichage*/
|
//Affichage de la fenêtre
|
||||||
fenetre.setVisible(true);
|
fenetre.setVisible(true);
|
||||||
|
|
||||||
/*evenements*/
|
/*evenements*/
|
||||||
ouvrir.addActionListener(new ActionListener() {
|
ouvrir.addActionListener(new ActionListener() {
|
||||||
|
/**
|
||||||
|
* Ouvre un sélecteur de fichiers pour choisir un fichier de grille.
|
||||||
|
*
|
||||||
|
* @param e L'événement d'action.
|
||||||
|
*/
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
try {
|
try {
|
||||||
JFileChooser filechooser = new JFileChooser();
|
JFileChooser filechooser = new JFileChooser();
|
||||||
@ -82,19 +101,24 @@ public class menuProgramme2 {
|
|||||||
});
|
});
|
||||||
|
|
||||||
lancer.addActionListener(new ActionListener() {
|
lancer.addActionListener(new ActionListener() {
|
||||||
|
/**
|
||||||
|
* Lance la résolution du Sudoku en fonction du mode choisi.
|
||||||
|
*
|
||||||
|
* @param e2 L'événement d'action.
|
||||||
|
*/
|
||||||
public void actionPerformed(ActionEvent e2) {
|
public void actionPerformed(ActionEvent e2) {
|
||||||
if(cheminFichier != null){
|
if(cheminFichier != null){
|
||||||
if (ResolutionManuel == true) {
|
if (ResolutionManuel == true) {
|
||||||
fenetre.dispose();
|
fenetre.dispose();
|
||||||
grille.AfficherGrille(grille.ChargerGrille(cheminFichier),false, true, 0);
|
Grille.AfficherGrille(Grille.ChargerGrille(cheminFichier),false, true, 0);
|
||||||
} else {
|
} else {
|
||||||
fenetre.dispose();
|
fenetre.dispose();
|
||||||
long debut = System.nanoTime();
|
long debut = System.nanoTime();
|
||||||
int[][] grille_resolue = new int[9][9];
|
int[][] grille_resolue = new int[9][9];
|
||||||
grille_resolue = resolveurGrille.resoudreGrille(grille.ChargerGrille(cheminFichier));
|
grille_resolue = resolveurGrille.resoudreGrille(Grille.ChargerGrille(cheminFichier));
|
||||||
long fin = System.nanoTime();
|
long fin = System.nanoTime();
|
||||||
long duree = fin - debut;
|
long duree = fin - debut;
|
||||||
grille.AfficherGrille(grille_resolue,false, false, duree);
|
Grille.AfficherGrille(grille_resolue,false, false, duree);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
InfoLogiciel.setText(" Info : Erreur : Veuillez selectionner un fichier .gri");
|
InfoLogiciel.setText(" Info : Erreur : Veuillez selectionner un fichier .gri");
|
||||||
@ -104,12 +128,22 @@ public class menuProgramme2 {
|
|||||||
});
|
});
|
||||||
|
|
||||||
quitter.addActionListener(new ActionListener() {
|
quitter.addActionListener(new ActionListener() {
|
||||||
|
/**
|
||||||
|
* Ferme l'application.
|
||||||
|
*
|
||||||
|
* @param e3 L'événement d'action.
|
||||||
|
*/
|
||||||
public void actionPerformed(ActionEvent e3) {
|
public void actionPerformed(ActionEvent e3) {
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
manuel.addActionListener(new ActionListener() {
|
manuel.addActionListener(new ActionListener() {
|
||||||
|
/**
|
||||||
|
* Définit le mode de résolution manuel.
|
||||||
|
*
|
||||||
|
* @param e1 L'événement d'action.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e1) {
|
public void actionPerformed(ActionEvent e1) {
|
||||||
ResolutionManuel = true;
|
ResolutionManuel = true;
|
||||||
@ -117,6 +151,11 @@ public class menuProgramme2 {
|
|||||||
});
|
});
|
||||||
|
|
||||||
auto.addActionListener(new ActionListener() {
|
auto.addActionListener(new ActionListener() {
|
||||||
|
/**
|
||||||
|
* Définit le mode de résolution automatique.
|
||||||
|
*
|
||||||
|
* @param e L'événement d'action.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
ResolutionManuel = false;
|
ResolutionManuel = false;
|
||||||
|
@ -1,29 +1,48 @@
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe pour résoudre une grille de Sudoku.
|
||||||
|
*
|
||||||
|
* @author Julian GALLEGO
|
||||||
|
* @author Wilfried BRIGITTE
|
||||||
|
*/
|
||||||
public class resolveurGrille {
|
public class resolveurGrille {
|
||||||
|
|
||||||
private static int[][] solution = new int[9][9];
|
private static int[][] solution = new int[9][9];
|
||||||
private static boolean stop = false;
|
private static boolean stop = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Résout une grille de Sudoku.
|
||||||
|
*
|
||||||
|
* @param grille La grille à résoudre.
|
||||||
|
* @return La grille résolue.
|
||||||
|
*/
|
||||||
public static int[][] resoudreGrille(int[][] grille) {
|
public static int[][] resoudreGrille(int[][] grille) {
|
||||||
/*remise à zéro de la solution*/
|
// Remise à zéro de la solution
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
for (int j = 0; j < 9; j++) {
|
for (int j = 0; j < 9; j++) {
|
||||||
solution[i][j] = 0;
|
solution[i][j] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Réinitialiser la valeur de stop à chaque début de résolution*/
|
// Réinitialiser la valeur de stop à chaque début de résolution
|
||||||
resoudreSudoku(grille);
|
resoudreSudoku(grille);
|
||||||
return solution;
|
return solution;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Résout une grille de Sudoku.
|
||||||
|
*
|
||||||
|
* @param grille La grille à résoudre.
|
||||||
|
* @return true si une solution a été trouvée, sinon false.
|
||||||
|
*/
|
||||||
public static boolean resoudreSudoku(int[][] grille) {
|
public static boolean resoudreSudoku(int[][] grille) {
|
||||||
/*parcourage la grille*/
|
//Parcours la grille
|
||||||
stop = false;
|
stop = false;
|
||||||
for (int row = 0; row < 9; row++) {
|
for (int row = 0; row < 9; row++) {
|
||||||
for (int col = 0; col < 9; col++) {
|
for (int col = 0; col < 9; col++) {
|
||||||
if (grille[row][col] == 0) {
|
if (grille[row][col] == 0) {
|
||||||
/*essayer les chiffres de 1 a 9 pour la case vide*/
|
//essayer les chiffres de 1 a 9 pour la case vide
|
||||||
for (int num = 1; num <= 9; num++) {
|
for (int num = 1; num <= 9; num++) {
|
||||||
if (isValid(grille, row, col, num)) {
|
if (isValid(grille, row, col, num)) {
|
||||||
grille[row][col] = num;
|
grille[row][col] = num;
|
||||||
@ -31,37 +50,45 @@ public class resolveurGrille {
|
|||||||
if (stop) {
|
if (stop) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
grille[row][col] = 0; /*réinitialiser la case si la solution n'est pas trouvée*/
|
grille[row][col] = 0; //réinitialiser la case si la solution n'est pas trouvée
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false; /* Si aucune solution trouvée à cette étape on s'arrêtee*/
|
return false; //Si aucune solution trouvée à cette étape on s'arrête
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*copier l a grille résolue dans la solution*/
|
//copier l a grille résolue dans la solution
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
System.arraycopy(grille[i], 0, solution[i], 0, 9);
|
System.arraycopy(grille[i], 0, solution[i], 0, 9);
|
||||||
}
|
}
|
||||||
return stop = true;
|
return stop = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Méthode pour vérifier la validité d'un chiffre dans une case donnée*/
|
/**
|
||||||
|
* Vérifie si un chiffre est valide dans une case donnée.
|
||||||
|
*
|
||||||
|
* @param grille La grille de Sudoku.
|
||||||
|
* @param row L'indice de ligne de la case.
|
||||||
|
* @param col L'indice de colonne de la case.
|
||||||
|
* @param num Le chiffre à vérifier.
|
||||||
|
* @return true si le chiffre est valide, sinon false.
|
||||||
|
*/
|
||||||
public static boolean isValid(int[][] grille, int row, int col, int num) {
|
public static boolean isValid(int[][] grille, int row, int col, int num) {
|
||||||
/*Vérifier la ligne*/
|
//Vérifier la ligne
|
||||||
for (int x = 0; x < 9; x++) {
|
for (int x = 0; x < 9; x++) {
|
||||||
if (grille[row][x] == num) {
|
if (grille[row][x] == num) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*Vérifier la colonne*/
|
//Vérifier la colonne
|
||||||
for (int x = 0; x < 9; x++) {
|
for (int x = 0; x < 9; x++) {
|
||||||
if (grille[x][col] == num) {
|
if (grille[x][col] == num) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Vérifier la sous-grille 3x3*/
|
//Vérifier la sous-grille 3x3
|
||||||
int startRow = row - row % 3;
|
int startRow = row - row % 3;
|
||||||
int startCol = col - col % 3;
|
int startCol = col - col % 3;
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
|
Loading…
Reference in New Issue
Block a user