nettoyage + ecran de victoire
This commit is contained in:
parent
9e223843ff
commit
e1836143cd
36
Sudoku/JeuFini.java
Normal file
36
Sudoku/JeuFini.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
|
||||||
|
public class JeuFini {
|
||||||
|
/*afficher la fenetre de fin*/
|
||||||
|
public static void JeuFini(){
|
||||||
|
JFrame fenetre = new JFrame();
|
||||||
|
fenetre.setSize(500, 200);
|
||||||
|
fenetre.setTitle("End Game ! (By Wilfried BRIGITTE & Julian GALLEGO)");
|
||||||
|
fenetre.setResizable(false);
|
||||||
|
fenetre.setLocationRelativeTo(null);
|
||||||
|
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
|
GridLayout gestionnaire = new GridLayout(2,1);
|
||||||
|
fenetre.setLayout(gestionnaire);
|
||||||
|
|
||||||
|
JLabel titre = new JLabel("Bravo vous avez résolu le Sudoku");
|
||||||
|
titre.setHorizontalAlignment(JLabel.CENTER);
|
||||||
|
titre.setFont(new Font("Arial", Font.PLAIN, 30));
|
||||||
|
fenetre.add(titre, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
JPanel ligne2 = new JPanel();
|
||||||
|
JButton quitter = new JButton("Quitter");
|
||||||
|
ligne2.add(quitter);
|
||||||
|
fenetre.add(ligne2, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
fenetre.setVisible(true);
|
||||||
|
|
||||||
|
quitter.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -14,7 +14,7 @@ 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
|
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
|
||||||
@ -29,6 +29,9 @@ resolveurGrille.class : resolveurGrille.java
|
|||||||
JTextFieldCharLimit.class : JTextFieldCharLimit.java
|
JTextFieldCharLimit.class : JTextFieldCharLimit.java
|
||||||
${JC} ${JCFLAGS} JTextFieldCharLimit.java
|
${JC} ${JCFLAGS} JTextFieldCharLimit.java
|
||||||
|
|
||||||
|
JeuFini.class : JeuFini.java
|
||||||
|
${JC} ${JCFLAGS} JeuFini.java
|
||||||
|
|
||||||
### REGLES OPTIONNELLES ###
|
### REGLES OPTIONNELLES ###
|
||||||
|
|
||||||
run1 : mainProgramme1.class
|
run1 : mainProgramme1.class
|
||||||
|
@ -2,6 +2,9 @@ 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.FocusAdapter;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
import javax.swing.text.PlainDocument;
|
import javax.swing.text.PlainDocument;
|
||||||
@ -19,12 +22,15 @@ public class grille extends JComponent{
|
|||||||
/*Panneau pour la grille */
|
/*Panneau pour la grille */
|
||||||
public static JPanel place_grille = new JPanel();
|
public static JPanel place_grille = new JPanel();
|
||||||
|
|
||||||
|
/*variable de la fenetre*/
|
||||||
|
|
||||||
|
public static JFrame fenetre = new JFrame();
|
||||||
|
|
||||||
/*fonction pour afficher graphiquement la grille*/
|
/*fonction pour afficher graphiquement la grille*/
|
||||||
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*/
|
||||||
JFrame fenetre = new JFrame();
|
|
||||||
fenetre.setSize(900, 950);
|
fenetre.setSize(900, 950);
|
||||||
/*fenetre.setResizable(false);*/
|
fenetre.setResizable(false);
|
||||||
fenetre.setLocationRelativeTo(null);
|
fenetre.setLocationRelativeTo(null);
|
||||||
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
@ -34,9 +40,10 @@ public class grille extends JComponent{
|
|||||||
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;
|
||||||
|
case_editable = new JTextField[9][9];
|
||||||
|
/*si la grille peut etre entierement éditée (dans le cas du programme1*/
|
||||||
if(editable){
|
if(editable){
|
||||||
JTextField[][] case_editable = null;
|
|
||||||
case_editable = new JTextField[9][9];
|
|
||||||
|
|
||||||
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++) {
|
||||||
@ -65,28 +72,26 @@ public class grille extends JComponent{
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
JTextField[][] case_modifiable = null;
|
|
||||||
JLabel[][] case_depart = null;
|
JLabel[][] case_depart = null;
|
||||||
case_depart = new JLabel[9][9];
|
case_depart = new JLabel[9][9];
|
||||||
case_modifiable = new JTextField[9][9];
|
|
||||||
|
|
||||||
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++) {
|
||||||
if ((grid_values[ligne][col]) == 0) {
|
if ((grid_values[ligne][col]) == 0) {
|
||||||
case_modifiable[ligne][col] = new JTextField("", 1);
|
case_editable[ligne][col] = new JTextField("", 1);
|
||||||
case_modifiable[ligne][col].setDocument(new JTextFieldCharLimit(4));
|
case_editable[ligne][col].setDocument(new JTextFieldCharLimit(4));
|
||||||
case_modifiable[ligne][col].setFont(new Font("Arial", Font.PLAIN, 30));
|
case_editable[ligne][col].setFont(new Font("Arial", Font.PLAIN, 30));
|
||||||
case_modifiable[ligne][col].setHorizontalAlignment(JTextField.CENTER);
|
case_editable[ligne][col].setHorizontalAlignment(JTextField.CENTER);
|
||||||
if ((ligne % 3 == 0) && (ligne != 0) && (col % 3 == 0) && (col != 0)){
|
if ((ligne % 3 == 0) && (ligne != 0) && (col % 3 == 0) && (col != 0)){
|
||||||
case_modifiable[ligne][col].setBorder(BorderFactory.createMatteBorder(5,5,2,2,Color.BLACK));
|
case_editable[ligne][col].setBorder(BorderFactory.createMatteBorder(5,5,2,2,Color.BLACK));
|
||||||
} else if ((col % 3 == 0) && (col != 0)){
|
} else if ((col % 3 == 0) && (col != 0)){
|
||||||
case_modifiable[ligne][col].setBorder(BorderFactory.createMatteBorder(2,5,2,2,Color.BLACK));
|
case_editable[ligne][col].setBorder(BorderFactory.createMatteBorder(2,5,2,2,Color.BLACK));
|
||||||
} else if ((ligne % 3 == 0) && (ligne != 0)){
|
} else if ((ligne % 3 == 0) && (ligne != 0)){
|
||||||
case_modifiable[ligne][col].setBorder(BorderFactory.createMatteBorder(5,2,2,2,Color.BLACK));
|
case_editable[ligne][col].setBorder(BorderFactory.createMatteBorder(5,2,2,2,Color.BLACK));
|
||||||
}else {
|
}else {
|
||||||
case_modifiable[ligne][col].setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.BLACK));
|
case_editable[ligne][col].setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.BLACK));
|
||||||
}
|
}
|
||||||
place_grille.add(case_modifiable[ligne][col]);
|
place_grille.add(case_editable[ligne][col]);
|
||||||
} else {
|
} else {
|
||||||
case_depart[ligne][col] = new JLabel(String.valueOf(grid_values[ligne][col]));
|
case_depart[ligne][col] = new JLabel(String.valueOf(grid_values[ligne][col]));
|
||||||
case_depart[ligne][col].setFont(new Font("Arial", Font.PLAIN, 30));
|
case_depart[ligne][col].setFont(new Font("Arial", Font.PLAIN, 30));
|
||||||
@ -111,7 +116,7 @@ public class grille extends JComponent{
|
|||||||
JButton exporter = null;
|
JButton exporter = null;
|
||||||
JPanel bouton_grille = new JPanel();
|
JPanel bouton_grille = new JPanel();
|
||||||
|
|
||||||
|
/*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");
|
||||||
@ -134,8 +139,41 @@ public class grille extends JComponent{
|
|||||||
/*affichage fenetre*/
|
/*affichage fenetre*/
|
||||||
fenetre.setVisible(true);
|
fenetre.setVisible(true);
|
||||||
|
|
||||||
/*System.out.println(grid[0][0].getText());*/
|
/*verification si un chiffre peut être placé à un endroit*/
|
||||||
|
for (int ligne = 0; ligne < 9; ligne++) {
|
||||||
|
for (int col = 0; col < 9; col++) {
|
||||||
|
final int finalLigne = ligne;
|
||||||
|
final int finalCol = col;
|
||||||
|
|
||||||
|
if (case_editable[ligne][col] != null) {
|
||||||
|
JTextField textField = case_editable[ligne][col];
|
||||||
|
textField.addFocusListener(new FocusAdapter() {
|
||||||
|
@Override
|
||||||
|
public void focusLost(FocusEvent e) {
|
||||||
|
VerificationGrilleFini();
|
||||||
|
int[][] currentGrid = GrilleActuelle();
|
||||||
|
String input = textField.getText().trim();
|
||||||
|
if (!input.isEmpty()) {
|
||||||
|
int newValue = Integer.parseInt(input);
|
||||||
|
textField.setText("");
|
||||||
|
currentGrid = GrilleActuelle();
|
||||||
|
if (resolveurGrille.isValid(currentGrid, finalLigne, finalCol, newValue)) {
|
||||||
|
// Mettre à jour la grille actuelle avec le nouveau chiffre
|
||||||
|
currentGrid[finalLigne][finalCol] = newValue;
|
||||||
|
textField.setText(Integer.toString(newValue));
|
||||||
|
} else {
|
||||||
|
// Le chiffre n'est pas valide, réinitialiser le champ
|
||||||
|
textField.setText("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*é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() {
|
||||||
public void actionPerformed(ActionEvent verifier) {
|
public void actionPerformed(ActionEvent verifier) {
|
||||||
@ -146,14 +184,7 @@ public class grille extends JComponent{
|
|||||||
|
|
||||||
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() {
|
||||||
public void actionPerformed(ActionEvent exporter) {
|
public void actionPerformed(ActionEvent exporter) {
|
||||||
for (int i=0; i < 9; i++){
|
|
||||||
for (int j=0; j < 9; j++){
|
|
||||||
System.out.print(GrilleActuelle()[i][j]);
|
|
||||||
}
|
|
||||||
System.out.println("");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(resolveurGrille.resoudreSudoku(GrilleActuelle()))){
|
if (!(resolveurGrille.resoudreSudoku(GrilleActuelle()))){
|
||||||
etat_exportation.setHorizontalAlignment(SwingConstants.LEFT);
|
etat_exportation.setHorizontalAlignment(SwingConstants.LEFT);
|
||||||
etat_exportation.setText("Sudoku Impossible.");
|
etat_exportation.setText("Sudoku Impossible.");
|
||||||
@ -205,6 +236,7 @@ public class grille extends JComponent{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*fonction pour exporter une grille en fichier .gri*/
|
||||||
public static void ExporterGrille(int[][] grille){
|
public static void ExporterGrille(int[][] grille){
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -223,7 +255,6 @@ public class grille extends JComponent{
|
|||||||
ligne_a_ecrire = ligne_a_ecrire+String.valueOf(grille[i][j]);
|
ligne_a_ecrire = ligne_a_ecrire+String.valueOf(grille[i][j]);
|
||||||
}
|
}
|
||||||
entier_a_ecrire = Integer.parseInt(ligne_a_ecrire);
|
entier_a_ecrire = Integer.parseInt(ligne_a_ecrire);
|
||||||
System.out.print(entier_a_ecrire +"\n");
|
|
||||||
fichier2.writeInt(entier_a_ecrire);
|
fichier2.writeInt(entier_a_ecrire);
|
||||||
ligne_a_ecrire = "";
|
ligne_a_ecrire = "";
|
||||||
}
|
}
|
||||||
@ -239,6 +270,7 @@ public class grille extends JComponent{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*fonction pour récupérer les valeurs ACTUELLES de la grille est les placer dans un tableau*/
|
||||||
public static int[][] GrilleActuelle(){
|
public static int[][] GrilleActuelle(){
|
||||||
int[][] grilleActuelle = new int[9][9];
|
int[][] grilleActuelle = new int[9][9];
|
||||||
|
|
||||||
@ -259,6 +291,7 @@ public class grille extends JComponent{
|
|||||||
return grilleActuelle;
|
return grilleActuelle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*fonction pour verifier si la grille actuelle correspond à la grille trouvé en solution*/
|
||||||
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);
|
||||||
@ -266,12 +299,12 @@ public class grille extends JComponent{
|
|||||||
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++){
|
||||||
if(soluce_de_la_grille[ligne][col] != gActuelle[ligne][col]){
|
if(soluce_de_la_grille[ligne][col] != gActuelle[ligne][col]){
|
||||||
System.out.println("La grille n'est pas résolue");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.out.println("La grille est resolue !!!");
|
JeuFini.JeuFini();
|
||||||
|
fenetre.dispose();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
BIN
Sudoku/grille/test2
Normal file
BIN
Sudoku/grille/test2
Normal file
Binary file not shown.
@ -1,3 +1,5 @@
|
|||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class resolveurGrille {
|
public class resolveurGrille {
|
||||||
|
|
||||||
private static int[][] solution = new int[9][9];
|
private static int[][] solution = new int[9][9];
|
||||||
@ -45,14 +47,13 @@ public class resolveurGrille {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*Méthode pour vérifier la validité d'un chiffre dans une case donnée*/
|
/*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) {
|
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) {
|
||||||
@ -70,7 +71,6 @@ public class resolveurGrille {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user