ajout javadoc pour game et gui

This commit is contained in:
Lenny FOULOU
2024-12-10 17:16:13 +01:00
parent b6ef8ef731
commit c9bbebf500
5 changed files with 294 additions and 18 deletions

View File

@@ -5,19 +5,59 @@ import java.util.List;
import java.util.Objects;
import javax.swing.*;
/**
* Un composant graphique Swing pour afficher un histogramme représentant les scores moyens des groupes.
* Chaque barre représente un groupe et est colorée différemment en fonction de s'il est mis en surbrillance.
*
* Les barres sont ombrées et incluent des labels pour indiquer les scores moyens, ainsi que les noms des groupes.
*
* @version 1.0
* @author Moncef STITI
*/
public class BarChartPanel extends JPanel {
/** Liste des scores moyens des groupes. */
private final List<Integer> groupAverages;
/** Indice du groupe mis en surbrillance. */
private final int highlightedGroup;
/** Couleur de la barre pour le groupe du joueur. */
private static final Color PLAYER_GROUP_COLOR = new Color(204, 0, 0);
/** Couleur des barres pour les autres groupes. */
private static final Color OTHER_GROUP_COLOR = new Color(0, 0, 204);
/** Couleur de l'ombre projetée par les barres. */
private static final Color SHADOW_COLOR = new Color(0, 0, 0, 60);
/** Couleur du texte affiché sur les barres. */
private static final Color TEXT_COLOR = Color.BLACK;
/** Police pour le label "Score moyen". */
private static final Font AVERAGE_FONT = new Font("Arial", Font.ITALIC, 12);
/** Police pour les labels des groupes. */
private static final Font GROUP_LABEL_FONT = new Font("Arial", Font.BOLD, 16);
/** Police pour afficher les scores des groupes. */
private static final Font SCORE_FONT = new Font("Arial", Font.BOLD, 14);
/** Marge autour de l'histogramme. */
private static final int PADDING = 30;
/** Décalage de l'ombre en pixels. */
private static final int SHADOW_OFFSET = 2;
/**
* Construit un nouveau panneau d'histogramme.
*
* @param groupAverages Liste des scores moyens des groupes.
* La taille de cette liste détermine le nombre de barres dans l'histogramme.
* @param highlightedGroup Indice du groupe à mettre en surbrillance.
* Si cet indice ne correspond à aucun groupe, aucune barre ne sera mise en surbrillance.
* @throws NullPointerException si {@code groupAverages} est {@code null}.
*/
public BarChartPanel(List<Integer> groupAverages, int highlightedGroup) {
this.groupAverages = Objects.requireNonNull(groupAverages, "Group averages cannot be null");
this.highlightedGroup = highlightedGroup;
@@ -28,6 +68,11 @@ public class BarChartPanel extends JPanel {
setAlignmentX(Component.CENTER_ALIGNMENT);
}
/**
* Dessine le composant graphique, incluant les barres, les labels et les scores.
*
* @param g Le contexte graphique.
*/
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

View File

@@ -6,19 +6,49 @@ import fr.monkhanny.dorfromantik.controller.ButtonHoverAnimationListener;
import javax.swing.*;
import java.awt.*;
/**
* Classe gérant les animations de survol pour les boutons (JButton).
* Permet d'effectuer des transitions douces sur les propriétés du bouton, telles que
* la couleur du texte et la taille de la police, lors du survol ou du départ de la souris.
*
* @version 1.0
* @author Khalid CHENOUNA
*/
public class ButtonHoverAnimator {
/** Le bouton pour lequel les animations sont appliquées. */
private final JButton button;
/** La couleur d'origine du texte du bouton. */
private final Color originalColor;
/** La police d'origine du bouton, partagée pour toutes les instances. */
private static Font originalFont;
/** Timer utilisé pour exécuter les animations avec une transition fluide. */
private Timer animationTimer;
/**
* Constructeur de l'animateur de bouton.
* Initialise les propriétés d'origine (couleur, police) et associe l'animation au bouton spécifié.
*
* @param button Le bouton cible de l'animation.
*/
public ButtonHoverAnimator(JButton button) {
this.button = button;
this.originalColor = button.getForeground();
ButtonHoverAnimator.originalFont = button.getFont();
}
/**
* Lance l'animation de transition sur le bouton, en fonction de l'état du survol.
*
* @param entering Indique si la souris entre ou quitte le bouton :
* <ul>
* <li><code>true</code> : la souris entre sur le bouton (animation d'entrée).</li>
* <li><code>false</code> : la souris quitte le bouton (animation de sortie).</li>
* </ul>
*/
public void startAnimation(boolean entering) {
if (animationTimer != null && animationTimer.isRunning()) {
animationTimer.stop();
@@ -29,6 +59,13 @@ public class ButtonHoverAnimator {
animationTimer.start();
}
/**
* Met à jour la taille de la police originale partagée entre toutes les instances.
* Cette méthode est utile pour adapter dynamiquement la police en fonction de
* la taille de la fenêtre ou des préférences de l'utilisateur.
*
* @param newFontSize La nouvelle taille de la police.
*/
public static void updateOriginalFont(float newFontSize) {
originalFont = originalFont.deriveFont(newFontSize);
}

View File

@@ -8,14 +8,32 @@ import javax.swing.*;
import java.util.List;
import java.util.Arrays;
/**
* Représente un panneau contenant les boutons du menu principal du jeu.
* Ce panneau dispose d'une disposition verticale et intègre des boutons avec un style personnalisé.
*
* @version 1.0
* @author Khalid CHENOUNA
*/
public class ButtonPanel extends JPanel {
/** Bouton pour démarrer une nouvelle partie. */
private JButton newGameButton;
/** Bouton pour accéder aux instructions sur comment jouer. */
private JButton howToPlayButton;
/** Bouton pour accéder aux paramètres du jeu. */
private JButton settingsButton;
/** Bouton pour quitter l'application. */
private JButton exitButton;
/**
* Constructeur qui initialise le panneau avec des boutons et applique un style personnalisé.
*
* @param fontSize La taille de police initiale des boutons.
*/
public ButtonPanel(float fontSize) {
// Paramétrage de l'apparence du panneau
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
@@ -47,26 +65,58 @@ public class ButtonPanel extends JPanel {
MainMenuMouseController gestionSouris = new MainMenuMouseController(this);
}
/**
* Retourne le bouton "Jouer".
*
* @return Le bouton "Jouer".
*/
public JButton getNewGameButton() {
return newGameButton;
}
/**
* Retourne le bouton "Comment jouer ?".
*
* @return Le bouton "Comment jouer ?".
*/
public JButton getHowToPlayButton() {
return howToPlayButton;
}
/**
* Retourne le bouton "Paramètres".
*
* @return Le bouton "Paramètres".
*/
public JButton getSettingsButton() {
return settingsButton;
}
/**
* Retourne le bouton "Quitter".
*
* @return Le bouton "Quitter".
*/
public JButton getExitButton() {
return exitButton;
}
/**
* Retourne la liste de tous les boutons contenus dans ce panneau.
*
* @return Une liste des boutons : "Jouer", "Comment jouer ?", "Paramètres" et "Quitter".
*/
public List<JButton> getButtons() {
return Arrays.asList(newGameButton, howToPlayButton, settingsButton, exitButton);
}
/**
* Met à jour la taille des polices des boutons en fonction de la largeur de la fenêtre.
* Cette méthode ajuste dynamiquement la taille des polices pour s'adapter
* à différents écrans ou résolutions.
*
* @param windowWidth La largeur actuelle de la fenêtre.
*/
public void updateButtonFonts(int windowWidth) {
// Mettre à jour la police des boutons avec la taille ajustée
float newFontSize = windowWidth / 30f;