126 lines
4.5 KiB
Java
126 lines
4.5 KiB
Java
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.event.MouseMotionAdapter;
|
|
|
|
/**
|
|
* La classe <code>JeuBlocs</code> est responsable de l'affichage graphique du jeu SameGame.
|
|
* Elle affiche la grille avec ses blocs et gère la surbrillance des groupes de blocs lorsqu'ils sont survolés par la souris.
|
|
*
|
|
* @version 1.11
|
|
* @author Emmanuel Srivastava-Tiamzon & Wael Atik
|
|
*/
|
|
public class JeuBlocs extends JComponent {
|
|
|
|
/** La grille logique du jeu. */
|
|
private Grille grille;
|
|
|
|
/** Images représentant les blocs rouges, verts, bleus et vides. */
|
|
private Image imageRouge;
|
|
private Image imageVert;
|
|
private Image imageBleu;
|
|
private Image imageVide;
|
|
|
|
/** La taille d'un bloc (en pixels). */
|
|
private int tailleBloc;
|
|
|
|
/** Tableau de booleans pour gérer la surbrillance des blocs. */
|
|
private boolean[][] surbrillance;
|
|
|
|
/**
|
|
* Constructeur de la vue graphique du jeu SameGame.
|
|
* Initialise les images des blocs, la taille des blocs et configure la gestion de la souris.
|
|
*
|
|
* @param grille la grille logique du jeu
|
|
* @param largeur la largeur totale de la fenêtre (en pixels)
|
|
* @param hauteur la hauteur totale de la fenêtre (en pixels)
|
|
*/
|
|
public JeuBlocs(Grille grille, int largeur, int hauteur) {
|
|
this.grille = grille;
|
|
this.tailleBloc = Math.min(largeur / grille.getColonnes(), hauteur / grille.getLignes());
|
|
this.setPreferredSize(new Dimension(largeur, hauteur));
|
|
|
|
this.imageRouge = Toolkit.getDefaultToolkit().getImage("../image/Coeur.jpg");
|
|
this.imageVert = Toolkit.getDefaultToolkit().getImage("../image/Croix.jpg");
|
|
this.imageBleu = Toolkit.getDefaultToolkit().getImage("../image/Carre.jpg");
|
|
this.imageVide = Toolkit.getDefaultToolkit().getImage("../image/Vide.jpg");
|
|
this.surbrillance = new boolean[grille.getLignes()][grille.getColonnes()];
|
|
|
|
this.addMouseMotionListener(new MouseMotionAdapter() {
|
|
@Override
|
|
public void mouseMoved(MouseEvent e) {
|
|
int ligne = e.getY() / tailleBloc;
|
|
int colonne = e.getX() / tailleBloc;
|
|
|
|
if (ligne >= 0 && ligne < grille.getLignes() && colonne >= 0 && colonne < grille.getColonnes()) {
|
|
if (grille.estGroupe(ligne, colonne)) {
|
|
surbrillance = new boolean[grille.getLignes()][grille.getColonnes()];
|
|
grille.marquerGroupe(grille.getCase(ligne, colonne), ligne, colonne, surbrillance);
|
|
} else {
|
|
surbrillance = new boolean[grille.getLignes()][grille.getColonnes()];
|
|
}
|
|
repaint();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Méthode de dessin de la grille et des blocs.
|
|
* Affiche les blocs et leur surbrillance si nécessaire.
|
|
*
|
|
* @param g l'objet graphique utilisé pour dessiner
|
|
*/
|
|
@Override
|
|
protected void paintComponent(Graphics pinceau) {
|
|
Graphics secondPinceau = pinceau.create();
|
|
|
|
if (this.isOpaque()) {
|
|
secondPinceau.setColor(this.getBackground());
|
|
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
|
|
}
|
|
|
|
char[][] gLogique = grille.getGrille();
|
|
|
|
|
|
for (int i = 0; i < grille.getLignes(); i++) {
|
|
for (int j = 0; j < grille.getColonnes(); j++) {
|
|
char c = gLogique[i][j];
|
|
Image image = switch (c) {
|
|
case 'R' -> imageRouge;
|
|
case 'V' -> imageVert;
|
|
case 'B' -> imageBleu;
|
|
default -> imageVide;
|
|
};
|
|
|
|
secondPinceau.drawImage(image, j * tailleBloc, i * tailleBloc, tailleBloc, tailleBloc, this);
|
|
|
|
if (surbrillance[i][j]) {
|
|
secondPinceau.setColor(new Color(255, 255, 0, 80));
|
|
secondPinceau.fillRect(j * tailleBloc, i * tailleBloc, tailleBloc, tailleBloc);
|
|
}
|
|
|
|
secondPinceau.setColor(Color.BLACK);
|
|
secondPinceau.drawRect(j * tailleBloc, i * tailleBloc, tailleBloc, tailleBloc);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Méthode pour mettre à jour l'affichage graphique après une modification de la grille.
|
|
* Elle appelle le repaint pour rafraîchir la vue.
|
|
*/
|
|
public void mettreAJourCouleurs() {
|
|
repaint();
|
|
}
|
|
|
|
/**
|
|
* Retourne la taille d'un bloc (en pixels).
|
|
*
|
|
* @return la taille d'un bloc
|
|
*/
|
|
public int getTailleBloc() {
|
|
return tailleBloc;
|
|
}
|
|
}
|