ajout 2eme SAE DEV 1ere année 15,50/20
This commit is contained in:
125
SAE21_2024/code_source/JeuBlocs.java
Normal file
125
SAE21_2024/code_source/JeuBlocs.java
Normal file
@@ -0,0 +1,125 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user