import javax.swing.*; import java.awt.event.*; public class CaseMouseListener extends MouseAdapter { private SaisieGrille panel; public CaseMouseListener(SaisieGrille panel) { this.panel = panel; } @Override public void mouseClicked(MouseEvent e) { int x = e.getX() / panel.getTailleCellule(); int y = e.getY() / panel.getTailleCellule(); if (x >= 0 && x < panel.getTailleGrille() * panel.getTailleRegion() && y >= 0 && y < panel.getTailleGrille() * panel.getTailleRegion()) { panel.setLigneSelectionnee(y); panel.setColonneSelectionnee(x); System.out.println("Case sélectionnée : (" + panel.getLigneSelectionnee() + ", " + panel.getColonneSelectionnee() + ")"); if (panel.getGrilleInitiale()[panel.getLigneSelectionnee()][panel.getColonneSelectionnee()] == 0) { String[] options = {"Incertain", "Valider"}; JTextField textField = new JTextField(); Object[] message = { "Entrez la valeur pour la cellule sélectionnée :", textField }; int option = JOptionPane.showOptionDialog(null, message, "Entrez un nombre", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]); if (option == 1) { String valeurStr = textField.getText(); try { int valeur = Integer.parseInt(valeurStr); if (panel.validerChiffre(panel.getLigneSelectionnee(), panel.getColonneSelectionnee(), valeur)) { panel.getGrille()[panel.getLigneSelectionnee()][panel.getColonneSelectionnee()] = valeur; panel.repaint(); } else { JOptionPane.showMessageDialog(null, "Ce chiffre ne respecte pas les contraintes du Sudoku. Veuillez choisir un autre chiffre."); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Saisie invalide. Veuillez entrer un nombre."); } } else if (option == 0) { // Le joueur a choisi "Incertain" JTextField[] incertainFields = new JTextField[4]; for (int i = 0; i < 4; i++) { incertainFields[i] = new JTextField(); } Object[] incertainMessage = { "Entrez les valeurs incertaines pour la cellule sélectionnée :", "Valeur 1 (obligatoire):", incertainFields[0], "Valeur 2 (obligatoire):", incertainFields[1], "Valeur 3 (optionnelle):", incertainFields[2], "Valeur 4 (optionnelle):", incertainFields[3] }; int incertainOption = JOptionPane.showOptionDialog(null, incertainMessage, "Entrez les valeurs incertaines", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null); if (incertainOption == JOptionPane.OK_OPTION) { // Vérifier que les valeurs obligatoires sont remplies if (!incertainFields[0].getText().isEmpty() && !incertainFields[1].getText().isEmpty()) { // Récupérer les valeurs incertaines saisies par le joueur int valeursIncertaines = 0; for (int i = 0; i < 4; i++) { if (!incertainFields[i].getText().isEmpty()) { int valeur = Integer.parseInt(incertainFields[i].getText()); valeursIncertaines |= (valeur << (i * 4)); } } // Mettre à jour la grille avec les valeurs incertaines panel.getGrille()[panel.getLigneSelectionnee()][panel.getColonneSelectionnee()] = valeursIncertaines; panel.repaint(); } else { JOptionPane.showMessageDialog(null, "Les deux premières valeurs incertaines sont obligatoires."); } } } } else { JOptionPane.showMessageDialog(null, "Vous ne pouvez pas modifier la valeur par défaut."); } } } }