SAE21_2023/CaseMouseListener.java
2024-04-30 16:20:01 +02:00

79 lines
4.5 KiB
Java

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.");
}
}
}
}