diff --git a/Resolver.java b/Resolver.java index a8924fb..cfdf5f7 100644 --- a/Resolver.java +++ b/Resolver.java @@ -97,10 +97,8 @@ public class Resolver implements ActionListener { DecimalFormat df = new DecimalFormat("0.00"); JOptionPane.showMessageDialog(null, "Grille terminé en " + df.format(durée) + " secondes", "Résolution automatique", JOptionPane.INFORMATION_MESSAGE); - - - - + + } } diff --git a/TextFilter.java b/TextFilter.java index f6ab8d3..65a0a6d 100644 --- a/TextFilter.java +++ b/TextFilter.java @@ -17,8 +17,8 @@ public class TextFilter extends KeyAdapter { private int row; private int col; private ArrayList bad_numbers = new ArrayList(); - private boolean errorDetected = true; - private int status; + private boolean errorDetected = false; + private int status; public TextFilter (JTextField t,int GRID_SIZE, JTextField[][] grid, int i, int j, int status) { @@ -37,6 +37,7 @@ public class TextFilter extends KeyAdapter { char chiffre = e.getKeyChar(); int taille = this.Text.getText().length(); + boolean end_game = true; // Si la longueur du texte est égale à 3 après l'ajout du chiffre, définir la taille de la police à 20 if (taille > 1) { @@ -52,167 +53,189 @@ public class TextFilter extends KeyAdapter { // Vérifier le statut (1 == concepteur,2 == joueur) if (status == 2){ - if (errorDetected) { - if ((chiffre >= '1') && (chiffre <= '9')) { - GrilleValide(chiffre); - } - } else { - e.consume(); // empêcher la saisie de chiffres lorsque qu'une erreur est détectée + if (!errorDetected) { + if ((chiffre >= '1') && (chiffre <= '9')) { + GrilleValide(chiffre); } + } else { + e.consume(); // empêcher la saisie de chiffres lorsque qu'une erreur est détectée + } - // permet de bloquer la saisie de doublon dans la même case - if (!Text.getText().isEmpty() && (chiffre != KeyEvent.VK_BACK_SPACE)) { - String existingText = Text.getText(); - char[] existingChars = existingText.toCharArray(); - for (char c : existingChars) { - if (chiffre == c) { - e.consume(); // empêcher la réécriture du même chiffre - return; - } - } + // permet de bloquer la saisie de doublon dans la même case + if (!Text.getText().isEmpty() && (chiffre != KeyEvent.VK_BACK_SPACE)) { + String existingText = Text.getText(); + char[] existingChars = existingText.toCharArray(); + for (char c : existingChars) { + if (chiffre == c) { + e.consume(); // empêcher la réécriture du même chiffre + return; + } } + } - // Réinitialiser les couleurs si la touche de retour arrière est pressée lors d'une erreur - if ((!bad_numbers.isEmpty()) && (chiffre == KeyEvent.VK_BACK_SPACE)) { - Text.setBackground(Color.white); - while (!bad_numbers.isEmpty()) { - grid[bad_numbers.removeFirst()][bad_numbers.removeFirst()].setBackground(Color.white); - } - errorDetected = true; // Réinitialiser errorDetected après avoir corrigé les erreurs + // Réinitialiser les couleurs si la touche de retour arrière est pressée lors d'une erreur + if ((!bad_numbers.isEmpty()) && (chiffre == KeyEvent.VK_BACK_SPACE)) { + Text.setBackground(Color.white); + while (!bad_numbers.isEmpty()) { + grid[bad_numbers.removeFirst()][bad_numbers.removeFirst()].setBackground(Color.white); } + errorDetected = false; // Réinitialiser errorDetected après avoir corrigé les erreurs + } - // Défini la taille maiximum par case - if ( taille >= 4) { - e.consume(); + // Défini la taille maiximum par case + if ( taille >= 4) { + e.consume(); + } + + //Test si toutes les cases sont remplies et affiche un message de fin + if (!errorDetected) { + for (int row = 0; row < GRID_SIZE; row++) { + for (int col = 0; col < GRID_SIZE; col++) { + + String value = grid[row][col].getText(); + // Vérifier si la case contient plus d'un chiffre + if (value.length() > 1) { + end_game = false; + } + + if (grid[row][col].getText().isEmpty()) { + end_game = false; + } + } } + if (end_game) { + JOptionPane.showMessageDialog(null, "Bravo vous avez terminé la grille !", "Fin du jeu", JOptionPane.INFORMATION_MESSAGE); + } + } + } else if(status == 1){ - // Traite la saisie pour savoir si le chiffer peut être posé - if ( taille > 1 && ((chiffre >= '1') && (chiffre <= '9')) && (chiffre != KeyEvent.VK_ENTER)) { - GrilleValide(chiffre); - } + // Traite la saisie pour savoir si le chiffer peut être posé + if ( taille > 1 && ((chiffre >= '1') && (chiffre <= '9')) && (chiffre != KeyEvent.VK_ENTER)) { + GrilleValide(chiffre); + } - // Réinitialiser les couleurs si la touche de retour arrière est pressée lors d'une erreur - if ((!bad_numbers.isEmpty()) && (chiffre == KeyEvent.VK_BACK_SPACE)) { - Text.setBackground(Color.white); - while(!bad_numbers.isEmpty()) { - grid[bad_numbers.removeFirst()][bad_numbers.removeFirst()].setBackground(Color.white); - } - } - - // Taille maximum par case - if ( taille >= 1 ) { - e.consume(); + // Réinitialiser les couleurs si la touche de retour arrière est pressée lors d'une erreur + if ((!bad_numbers.isEmpty()) && (chiffre == KeyEvent.VK_BACK_SPACE)) { + Text.setBackground(Color.white); + while(!bad_numbers.isEmpty()) { + grid[bad_numbers.removeFirst()][bad_numbers.removeFirst()].setBackground(Color.white); } + } + + // Taille maximum par case + if ( taille >= 1 ) { + e.consume(); + } } - + // colorie la case si elle est bonne ou pas if ( (bad_numbers.isEmpty()) && (chiffre == KeyEvent.VK_BACK_SPACE)) { Coloriage(); } } - // permet de validé les règles du sudoku pour un chiffre posé. + // permet de validé les règles du sudoku pour un chiffre posé. public void GrilleValide(char chiffre) { - int evaluant = Integer.parseInt(Character.toString(chiffre)); - // Test de validité sur les lignes - for (int row2 = row + 1; row2 < this.GRID_SIZE; row2++) { - if (!grid[row2][col].getText().isEmpty()) { - int comparateur = Integer.parseInt(grid[row2][col].getText()); + int evaluant = Integer.parseInt(Character.toString(chiffre)); + // Test de validité sur les lignes + for (int row2 = row + 1; row2 < this.GRID_SIZE; row2++) { + if (!grid[row2][col].getText().isEmpty()) { + int comparateur = Integer.parseInt(grid[row2][col].getText()); + if (evaluant == comparateur) { + this.grid[row2][col].setBackground(Color.red); + this.grid[row][col].setBackground(Color.red); + this.bad_numbers.add(row2); + this.bad_numbers.add(col); + errorDetected = true; + } + } + } + for (int row2 = row - 1; row2 >= 0; row2--) { + if (!grid[row2][col].getText().isEmpty()) { + int comparateur = Integer.parseInt(grid[row2][col].getText()); + if (evaluant == comparateur) { + this.grid[row2][col].setBackground(Color.red); + this.grid[row][col].setBackground(Color.red); + this.bad_numbers.add(row2); + this.bad_numbers.add(col); + errorDetected = true; + } + } + } + + // Test de validité sur les colonnes + for (int col2 = col + 1; col2 < this.GRID_SIZE; col2++) { + if (!grid[row][col2].getText().isEmpty()) { + int comparateur = Integer.parseInt(grid[row][col2].getText()); + if (evaluant == comparateur) { + this.grid[row][col2].setBackground(Color.red); + this.grid[row][col].setBackground(Color.red); + this.bad_numbers.add(row); + this.bad_numbers.add(col2); + errorDetected = true; + } + } + } + for (int col2 = col - 1; col2 >= 0; col2--) { + if (!grid[row][col2].getText().isEmpty()) { + int comparateur = Integer.parseInt(grid[row][col2].getText()); + if (evaluant == comparateur) { + this.grid[row][col2].setBackground(Color.red); + this.grid[row][col].setBackground(Color.red); + this.bad_numbers.add(row); + this.bad_numbers.add(col2); + errorDetected = true; + } + } + } + + // Vérifier la validité dans les régions + int rowregion = this.row/3*3; + int colregion = this.col/3*3; + for (int row2 = rowregion; row2 < rowregion + 3; row2++) { + for (int col2 = colregion; col2 < colregion + 3; col2++) { + if (row2 != row && col2 != col ) { + if (!grid[row2][col2].getText().isEmpty()) { + int comparateur = Integer.parseInt(grid[row2][col2].getText()); if (evaluant == comparateur) { - this.grid[row2][col].setBackground(Color.red); - this.grid[row][col].setBackground(Color.red); - this.bad_numbers.add(row2); - this.bad_numbers.add(col); - errorDetected = false; - } + this.grid[row2][col2].setBackground(Color.red); + this.grid[row][col].setBackground(Color.red); + this.bad_numbers.add(row2); + this.bad_numbers.add(col2); + errorDetected = true; } + } } - for (int row2 = row - 1; row2 >= 0; row2--) { - if (!grid[row2][col].getText().isEmpty()) { - int comparateur = Integer.parseInt(grid[row2][col].getText()); - if (evaluant == comparateur) { - this.grid[row2][col].setBackground(Color.red); - this.grid[row][col].setBackground(Color.red); - this.bad_numbers.add(row2); - this.bad_numbers.add(col); - errorDetected = false; - } - } - } - - // Test de validité sur les colonnes - for (int col2 = col + 1; col2 < this.GRID_SIZE; col2++) { - if (!grid[row][col2].getText().isEmpty()) { - int comparateur = Integer.parseInt(grid[row][col2].getText()); - if (evaluant == comparateur) { - this.grid[row][col2].setBackground(Color.red); - this.grid[row][col].setBackground(Color.red); - this.bad_numbers.add(row); - this.bad_numbers.add(col2); - errorDetected = false; - } - } - } - for (int col2 = col - 1; col2 >= 0; col2--) { - if (!grid[row][col2].getText().isEmpty()) { - int comparateur = Integer.parseInt(grid[row][col2].getText()); - if (evaluant == comparateur) { - this.grid[row][col2].setBackground(Color.red); - this.grid[row][col].setBackground(Color.red); - this.bad_numbers.add(row); - this.bad_numbers.add(col2); - errorDetected = false; - } - } - } - - // Vérifier la validité dans les régions - int rowregion = this.row/3*3; - int colregion = this.col/3*3; - for (int row2 = rowregion; row2 < rowregion + 3; row2++) { - for (int col2 = colregion; col2 < colregion + 3; col2++) { - if (row2 != row && col2 != col ) { - if (!grid[row2][col2].getText().isEmpty()) { - int comparateur = Integer.parseInt(grid[row2][col2].getText()); - if (evaluant == comparateur) { - this.grid[row2][col2].setBackground(Color.red); - this.grid[row][col].setBackground(Color.red); - this.bad_numbers.add(row2); - this.bad_numbers.add(col2); - errorDetected = false; - } - } - } - } - } - } - - // permet de colorier en blanc si l'erreur n'est plus présente + } + } + } + + // permet de colorier en blanc si l'erreur n'est plus présente public void Coloriage() { - //coloriage sur les lignes - for (int row2 = 0; row2 < this.GRID_SIZE; row2++) { - if (this.grid[row2][this.col].getBackground() == Color.red) { - this.grid[row2][this.col].setBackground(Color.white); - } - } - - //coloriage sur les colonnes - for (int col2 = 0; col2 < this.GRID_SIZE; col2++) { - if (this.grid[this.row][col2].getBackground() == Color.red) { - this.grid[this.row][col2].setBackground(Color.white); - } - } - - //coloriage des régions - int rowregion = this.row/3*3; - int colregion = this.col/3*3; - for (int row2 = rowregion; row2 < rowregion + 3; row2++) { - for (int col2 = colregion; col2 < colregion + 3; col2++) { - if (this.grid[row2][col2].getBackground() == Color.red) { - this.grid[row2][col2].setBackground(Color.white); - } - } + //coloriage sur les lignes + for (int row2 = 0; row2 < this.GRID_SIZE; row2++) { + if (this.grid[row2][this.col].getBackground() == Color.red) { + this.grid[row2][this.col].setBackground(Color.white); + } + } + + //coloriage sur les colonnes + for (int col2 = 0; col2 < this.GRID_SIZE; col2++) { + if (this.grid[this.row][col2].getBackground() == Color.red) { + this.grid[this.row][col2].setBackground(Color.white); + } + } + + //coloriage des régions + int rowregion = this.row/3*3; + int colregion = this.col/3*3; + for (int row2 = rowregion; row2 < rowregion + 3; row2++) { + for (int col2 = colregion; col2 < colregion + 3; col2++) { + if (this.grid[row2][col2].getBackground() == Color.red) { + this.grid[row2][col2].setBackground(Color.white); } + } + } } }