SAE21_2023/SaisieGrille.java

99 lines
2.8 KiB
Java

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