nettoyage + ecran de victoire

This commit is contained in:
Wilfried BRIGITTE 2024-05-04 14:25:52 +02:00
parent 9e223843ff
commit e1836143cd
5 changed files with 106 additions and 34 deletions

36
Sudoku/JeuFini.java Normal file
View 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);
}
});
}
}

View File

@ -14,7 +14,7 @@ mainProgramme2.class : mainProgramme2.java menuProgramme2.class
mainProgramme1.class : mainProgramme1.java menuProgramme1.class
${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
menuProgramme2.class : menuProgramme2.java resolveurGrille.class grille.class
@ -29,6 +29,9 @@ resolveurGrille.class : resolveurGrille.java
JTextFieldCharLimit.class : JTextFieldCharLimit.java
${JC} ${JCFLAGS} JTextFieldCharLimit.java
JeuFini.class : JeuFini.java
${JC} ${JCFLAGS} JeuFini.java
### REGLES OPTIONNELLES ###
run1 : mainProgramme1.class

View File

@ -2,6 +2,9 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusAdapter;
import java.io.*;
import javax.swing.border.Border;
import javax.swing.text.PlainDocument;
@ -19,12 +22,15 @@ public class grille extends JComponent{
/*Panneau pour la grille */
public static JPanel place_grille = new JPanel();
/*variable de la fenetre*/
public static JFrame fenetre = new JFrame();
/*fonction pour afficher graphiquement la grille*/
public static void AfficherGrille (int[][] grille, boolean editable, boolean resolutionManuel, long duree) {
/*paramètre de base de la fenetre*/
JFrame fenetre = new JFrame();
fenetre.setSize(900, 950);
/*fenetre.setResizable(false);*/
fenetre.setResizable(false);
fenetre.setLocationRelativeTo(null);
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
@ -34,9 +40,10 @@ public class grille extends JComponent{
GridLayout gestionnaire = new GridLayout(9,9,-2,-2);
place_grille.setLayout(gestionnaire);
if(editable){
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){
for (int ligne = 0; ligne < 9; ligne++) {
for (int col = 0; col < 9; col++) {
@ -65,28 +72,26 @@ public class grille extends JComponent{
} else {
JTextField[][] case_modifiable = null;
JLabel[][] case_depart = null;
case_depart = new JLabel[9][9];
case_modifiable = new JTextField[9][9];
for (int ligne = 0; ligne < 9; ligne++) {
for (int col = 0; col < 9; col++) {
if ((grid_values[ligne][col]) == 0) {
case_modifiable[ligne][col] = new JTextField("", 1);
case_modifiable[ligne][col].setDocument(new JTextFieldCharLimit(4));
case_modifiable[ligne][col].setFont(new Font("Arial", Font.PLAIN, 30));
case_modifiable[ligne][col].setHorizontalAlignment(JTextField.CENTER);
case_editable[ligne][col] = new JTextField("", 1);
case_editable[ligne][col].setDocument(new JTextFieldCharLimit(4));
case_editable[ligne][col].setFont(new Font("Arial", Font.PLAIN, 30));
case_editable[ligne][col].setHorizontalAlignment(JTextField.CENTER);
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)){
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)){
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 {
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 {
case_depart[ligne][col] = new JLabel(String.valueOf(grid_values[ligne][col]));
case_depart[ligne][col].setFont(new Font("Arial", Font.PLAIN, 30));
@ -111,7 +116,7 @@ public class grille extends JComponent{
JButton exporter = null;
JPanel bouton_grille = new JPanel();
/*affichage des boutons en fonction du programme lancé*/
if(editable){
bouton_grille.add(etat_exportation);
exporter = new JButton("exporter");
@ -134,8 +139,41 @@ public class grille extends JComponent{
/*affichage fenetre*/
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é */
verifier.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent verifier) {
@ -147,13 +185,6 @@ public class grille extends JComponent{
if (exporter != null) { /* Vérification pour s'assurer que exporter a été initialisé */
exporter.addActionListener(new ActionListener() {
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()))){
etat_exportation.setHorizontalAlignment(SwingConstants.LEFT);
etat_exportation.setText("Sudoku Impossible.");
@ -205,6 +236,7 @@ public class grille extends JComponent{
return null;
}
/*fonction pour exporter une grille en fichier .gri*/
public static void ExporterGrille(int[][] grille){
try {
@ -223,7 +255,6 @@ public class grille extends JComponent{
ligne_a_ecrire = ligne_a_ecrire+String.valueOf(grille[i][j]);
}
entier_a_ecrire = Integer.parseInt(ligne_a_ecrire);
System.out.print(entier_a_ecrire +"\n");
fichier2.writeInt(entier_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(){
int[][] grilleActuelle = new int[9][9];
@ -259,6 +291,7 @@ public class grille extends JComponent{
return grilleActuelle;
}
/*fonction pour verifier si la grille actuelle correspond à la grille trouvé en solution*/
public static boolean VerificationGrilleFini(){
int[][] soluce_de_la_grille = new int[9][9];
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 col = 0; col <9; col++){
if(soluce_de_la_grille[ligne][col] != gActuelle[ligne][col]){
System.out.println("La grille n'est pas résolue");
return false;
}
}
}
System.out.println("La grille est resolue !!!");
JeuFini.JeuFini();
fenetre.dispose();
return true;
}
}

BIN
Sudoku/grille/test2 Normal file

Binary file not shown.

View File

@ -1,3 +1,5 @@
import java.util.Arrays;
public class resolveurGrille {
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*/
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*/
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) {
@ -70,7 +71,6 @@ public class resolveurGrille {
}
}
}
return true;
}
}