import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SaisieGrille extends JPanel { private static final int TAILLE_GRILLE = 3; private static final int TAILLE_REGION = 3; private static final int TAILLE_CELLULE = 50; private int[][] grille; private int[][] grilleInitiale; private int ligneSelectionnee = -1; private int colonneSelectionnee = -1; public SaisieGrille(int[][] grille) { this.grille = grille; this.grilleInitiale = new int[grille.length][grille[0].length]; for (int i = 0; i < grille.length; i++) { for (int j = 0; j < grille[i].length; j++) { this.grilleInitiale[i][j] = grille[i][j]; } } setPreferredSize(new Dimension(TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE, TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE)); setFocusable(true); addMouseListener(new CaseMouseListener(this)); } public int[][] getGrilleInitiale() { return grilleInitiale; } public int getTailleGrille() { return TAILLE_GRILLE; } public int getTailleRegion() { return TAILLE_REGION; } public int getTailleCellule() { return TAILLE_CELLULE; } public void setLigneSelectionnee(int ligneSelectionnee) { this.ligneSelectionnee = ligneSelectionnee; } public void setColonneSelectionnee(int colonneSelectionnee) { this.colonneSelectionnee = colonneSelectionnee; } public int getLigneSelectionnee() { return ligneSelectionnee; } public int getColonneSelectionnee() { return colonneSelectionnee; } public int[][] getGrille() { return grille; } public boolean validerChiffre(int ligne, int colonne, int chiffre) { // Vérifier si le chiffre est entre 1 et 9 if (chiffre < 1 || chiffre > 9) { return false; } // Vérifier la ligne for (int j = 0; j < grille.length; j++) { if (grille[ligne][j] == chiffre && j != colonne) { return false; } } // Vérifier la colonne for (int i = 0; i < grille.length; i++) { if (grille[i][colonne] == chiffre && i != ligne) { return false; } } // Vérifier la région int regionX = colonne / TAILLE_REGION; int regionY = ligne / TAILLE_REGION; for (int i = regionY * TAILLE_REGION; i < (regionY + 1) * TAILLE_REGION; i++) { for (int j = regionX * TAILLE_REGION; j < (regionX + 1) * TAILLE_REGION; j++) { if (grille[i][j] == chiffre && (i != ligne || j != colonne)) { return false; } } } return true; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); GrillePainter.dessinerGrille(g, this); } }