99 lines
2.8 KiB
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);
|
|
}
|
|
}
|