ajout java doc + Makefile + mariadb.jar

This commit is contained in:
David AKAGUNDUZ 2024-10-27 20:39:25 +01:00
parent 6aacd0d59a
commit 23983e861f
14 changed files with 384 additions and 39 deletions

@ -4,16 +4,16 @@ JC = javac
JCFLAGS = -encoding UTF-8 -implicit:none -cp classes -d classes
JVM = java
JVMFLAGS = -cp classes
JVMFLAGS = -cp "classes:mariadb.jar"
MANIFEST_FILE = META-INF/MANIFEST.MF
### RÈGLES ESSENTIELLES ###
Main.class: Main.java java/controller/MenuController.class java/view/MenuView.class java/controller/GameController.class
Main.class: Main.java java/view/MenuView.class java/controller/GameController.class java/view/App.class
$(JC) $(JCFLAGS) Main.java
# Compilation des contrôleurs
java/controller/MenuController.class: java/controller/MenuController.java java/model/MenuModel.class java/view/MenuView.class java/controller/NewListener.class java/controller/QuiListener.class java/controller/ResListener.class
$(JC) $(JCFLAGS) java/controller/MenuController.java
###java/controller/MenuController.class: java/controller/MenuController.java java/model/MenuModel.class java/view/MenuView.class java/controller/NewListener.class java/controller/QuiListener.class java/controller/SeriesSelector.class
###$(JC) $(JCFLAGS) java/controller/MenuController.java
java/controller/NewListener.class: java/controller/NewListener.java
$(JC) $(JCFLAGS) java/controller/NewListener.java
@ -21,10 +21,13 @@ java/controller/NewListener.class: java/controller/NewListener.java
java/controller/QuiListener.class: java/controller/QuiListener.java
$(JC) $(JCFLAGS) java/controller/QuiListener.java
java/controller/ResListener.class: java/controller/ResListener.java java/view/GameView.class java/view/App.class
java/controller/ResListener.class: java/controller/ResListener.java java/view/GameView.class java/view/App.class
$(JC) $(JCFLAGS) java/controller/ResListener.java
java/controller/GameController.class: java/controller/GameController.java java/controller/TilePlacer.class java/model/Tile.class java/controller/CameraController.class java/controller/HexagonMouseListener.class
java/controller/SeriesSelector.class: java/controller/SeriesSelector.java java/view/GameView.class
$(JC) $(JCFLAGS) java/controller/SeriesSelector.java
java/controller/GameController.class: java/controller/GameController.java java/controller/ScoreGameContext.class java/controller/TilePlacer.class java/model/Tile.class java/controller/CameraController.class java/controller/HexagonMouseListener.class java/model/TileDatabaseManager.class java/controller/SendScore.class java/controller/GameEndListener.class
$(JC) $(JCFLAGS) java/controller/GameController.java
java/controller/MouseWheelController.class: java/controller/MouseWheelController.java java/view/HexagonTile.class java/controller/GameController.class
@ -39,17 +42,15 @@ java/controller/CameraController.class: java/controller/CameraController.java ja
java/controller/GameContext.class: java/controller/GameContext.java java/view/HexagonTile.class
$(JC) $(JCFLAGS) java/controller/GameContext.java
# Compilation des vues
java/view/GameView.class: java/view/GameView.java java/controller/MouseWheelController.class java/controller/GameController.class java/view/HexagonTile.class
java/view/GameView.class: java/view/GameView.java java/view/App.class java/view/ScoreView.class java/controller/MouseWheelController.class java/controller/GameController.class java/view/HexagonTile.class
$(JC) $(JCFLAGS) java/view/GameView.java
java/view/MenuView.class: java/view/MenuView.java java/view/BtnPerso.class java/view/ButtonHoverListener.class
java/view/MenuView.class: java/view/MenuView.java java/view/BtnPerso.class java/view/ButtonHoverListener.class java/controller/SeriesSelector.class
$(JC) $(JCFLAGS) java/view/MenuView.java
java/view/HexagonTile.class: java/view/HexagonTile.java java/model/Tile.class java/model/TerrainType.class
$(JC) $(JCFLAGS) java/view/HexagonTile.java
# Compilation des modèles
java/model/MenuModel.class: java/model/MenuModel.java
$(JC) $(JCFLAGS) java/model/MenuModel.java
@ -59,17 +60,12 @@ java/model/Tile.class: java/model/Tile.java java/model/TerrainType.class
java/model/TerrainType.class: java/model/TerrainType.java
$(JC) $(JCFLAGS) java/model/TerrainType.java
# Compilation des composants individuels
java/view/BtnPerso.class: java/view/BtnPerso.java
$(JC) $(JCFLAGS) java/view/BtnPerso.java
java/view/ButtonHoverListener.class: java/view/ButtonHoverListener.java
$(JC) $(JCFLAGS) java/view/ButtonHoverListener.java
java/view/App.class: java/view/App.java
$(JC) $(JCFLAGS) java/view/App.java
# Compilation des handlers
java/controller/MousePressHandler.class: java/controller/MousePressHandler.java java/controller/CameraControllerListener.class
$(JC) $(JCFLAGS) java/controller/MousePressHandler.java
@ -82,12 +78,51 @@ java/controller/CameraControllerListener.class: java/controller/CameraController
java/controller/TilePlacer.class: java/controller/TilePlacer.java
$(JC) $(JCFLAGS) java/controller/TilePlacer.java
java/model/TileDatabaseManager.class: java/model/TileDatabaseManager.java java/model/Tile.class
$(JC) $(JCFLAGS) java/model/TileDatabaseManager.java
java/controller/ScoreGameContext.class: java/controller/ScoreGameContext.java java/controller/GameContext.class java/model/Pocket.class java/model/TerrainType.class java/view/HexagonTile.class
$(JC) $(JCFLAGS) java/controller/ScoreGameContext.java
java/controller/SerieListener.class: java/controller/SerieListener.java java/controller/GameController.class
$(JC) $(JCFLAGS) java/controller/SerieListener.java
java/model/Pocket.class: java/model/Pocket.java java/model/TerrainType.class
$(JC) $(JCFLAGS) java/model/Pocket.java
java/controller/SendScore.class: java/controller/SendScore.java
$(JC) $(JCFLAGS) java/controller/SendScore.java
java/controller/GameEndListener.class: java/controller/GameEndListener.java
$(JC) $(JCFLAGS) java/controller/GameEndListener.java
java/view/App.class: java/view/App.java
$(JC) $(JCFLAGS) java/view/App.java
java/view/ScoreView.class: java/view/ScoreView.java java/view/App.class java/controller/AllScore.class java/view/BtnPerso.class
$(JC) $(JCFLAGS) java/view/ScoreView.java
java/controller/AllScore.class: java/controller/AllScore.java
$(JC) $(JCFLAGS) java/controller/AllScore.java
### RÈGLE POUR COPIER LES IMAGES ###
copy-images:
mkdir -p classes/java/view/img
if [ -d java/view/img ]; then cp -r java/view/img/* classes/java/view/img/; else echo "Le répertoire java/view/img n'existe pas."; fi
$(MANIFEST_FILE):
mkdir -p META-INF
echo "Manifest-Version: 1.0" > $(MANIFEST_FILE)
echo "Main-Class: main.Main" >> $(MANIFEST_FILE)
echo "Class-Path: mariadb.jar" >> $(MANIFEST_FILE)
### ARCHIVE JAR ###
Main.jar: Main.class copy-images $(MANIFEST_FILE)
mkdir -p classes/java/view/img
jar cfm Main.jar $(MANIFEST_FILE) -C classes .
### RÈGLES OPTIONNELLES ###
run: Main.class copy-images
@ -95,12 +130,10 @@ run: Main.class copy-images
clean:
-rm -f classes/**/*.class
mrproper: clean
-rm -rf classes/java/view/img
### BUTS FACTICES ###
.PHONY: run clean mrproper copy-images
.PHONY: run clean copy-images
### FIN ###

@ -1,40 +1,81 @@
// src/main/java/model/Pocket.java
package model;
import java.awt.Point;
import java.util.HashSet;
import java.util.Set;
/**
* La classe <code>Pocket</code> représente un groupe de tuiles adjacentes
* d'un même type de terrain dans le jeu.
*/
public class Pocket {
private TerrainType terrainType; // Type de terrain de cette Pocket
private Set<Point> tiles; // Ensemble des positions des tuiles de la Pocket
/**
* Constructeur de la classe <code>Pocket</code>.
*
* @param terrainType Le type de terrain associé à cette Pocket.
*/
public Pocket(TerrainType terrainType) {
this.terrainType = terrainType;
this.tiles = new HashSet<>();
}
/**
* Récupère le type de terrain de cette Pocket.
*
* @return Le type de terrain de cette Pocket.
*/
public TerrainType getTerrainType() {
return terrainType;
}
/**
* Obtient la taille de cette Pocket, c'est-à-dire le nombre de tuiles.
*
* @return La taille de la Pocket.
*/
public int getSize() {
return tiles.size();
}
/**
* Ajoute une tuile à cette Pocket à une position donnée.
*
* @param position La position de la tuile à ajouter.
*/
public void addTile(Point position) {
tiles.add(position);
}
/**
* Vérifie si une tuile à une position donnée est présente dans cette Pocket.
*
* @param position La position de la tuile à vérifier.
* @return <code>true</code> si la tuile est présente, sinon <code>false</code>.
*/
public boolean containsTile(Point position) {
return tiles.contains(position);
}
/**
* Fusionne cette Pocket avec une autre Pocket si elles partagent le même type de terrain.
*
* @param other La Pocket à fusionner.
*/
public void merge(Pocket other) {
if (this.terrainType == other.terrainType) {
this.tiles.addAll(other.tiles);
}
}
/**
* Calcule le score de cette Pocket basé sur la taille au carré.
*
* @return Le score de la Pocket.
*/
public int calculateScore() {
return getSize() * getSize(); // La taille au carré donne le score
}

@ -1,5 +1,14 @@
// src/main/java/model/TerrainType.java
package model;
/**
* L'énumération <code>TerrainType</code> représente les différents types de terrains
* disponibles dans le jeu.
*/
public enum TerrainType {
MER, CHAMP, PRE, FORET, MONTAGNE
MER, // Représente le type de terrain "mer"
CHAMP, // Représente le type de terrain "champ"
PRE, // Représente le type de terrain "pré"
FORET, // Représente le type de terrain "forêt"
MONTAGNE // Représente le type de terrain "montagne"
}

@ -1,11 +1,24 @@
// src/main/java/model/Tile.java
package model;
/**
* La classe <code>Tile</code> représente une tuile dans le jeu, qui peut contenir un ou deux types de terrains.
* Chaque tuile a un identifiant unique, un tableau de types de terrains, et gère sa rotation.
*/
public class Tile {
private int id; // ID de la tuile
private TerrainType[] terrains; // Tableau contenant deux types de terrains (ex. MER, FORET)
private int segmentsForTerrain1; // Nombre de segments pour le premier terrain
private int rotation; // Rotation de la tuile (en multiple de 60 degrés)
/**
* Constructeur pour créer une nouvelle tuile avec deux types de terrains.
*
* @param id L'identifiant de la tuile.
* @param terrain1 Le premier type de terrain.
* @param terrain2 Le deuxième type de terrain.
* @param segmentsForTerrain1 Le nombre de segments pour le premier terrain.
*/
public Tile(int id, TerrainType terrain1, TerrainType terrain2, int segmentsForTerrain1) {
this.id = id;
this.terrains = new TerrainType[]{terrain1, terrain2};
@ -13,7 +26,12 @@ public class Tile {
this.rotation = 0; // Initialisation de la rotation à 0
}
// Renvoie le terrain pour l'index donné (0 ou 1)
/**
* Renvoie le terrain pour l'index donné (0 ou 1).
*
* @param index L'index du terrain à récupérer.
* @return Le type de terrain à l'index spécifié, ou null si l'index est invalide.
*/
public TerrainType getTerrain(int index) {
if (index >= 0 && index < terrains.length) {
return terrains[index];
@ -21,7 +39,12 @@ public class Tile {
return null; // Retourne null si l'index est invalide
}
// Méthode pour obtenir le terrain associé à un segment spécifique (prend en compte la rotation)
/**
* Méthode pour obtenir le terrain associé à un segment spécifique (prend en compte la rotation).
*
* @param segmentIndex L'index du segment.
* @return Le type de terrain associé au segment spécifié.
*/
public TerrainType getTerrainForSegment(int segmentIndex) {
int adjustedIndex = (segmentIndex - rotation + 6) % 6;
if (adjustedIndex < segmentsForTerrain1) {
@ -31,18 +54,34 @@ public class Tile {
}
}
/**
* Fait tourner la tuile dans le sens horaire.
*/
public void rotateClockwise() {
rotation = (rotation + 1) % 6;
}
/**
* Fait tourner la tuile dans le sens antihoraire.
*/
public void rotateCounterClockwise() {
rotation = (rotation + 5) % 6; // Tourner dans le sens inverse
}
/**
* Renvoie la rotation actuelle de la tuile.
*
* @return La rotation de la tuile en multiples de 60 degrés.
*/
public int getRotation() {
return rotation;
}
/**
* Renvoie l'identifiant de la tuile.
*
* @return L'identifiant de la tuile.
*/
public int getId() {
return id;
}

@ -1,14 +1,25 @@
// src/main/java/model/TileDatabaseManager.java
package model;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* La classe <code>TileDatabaseManager</code> gère les interactions avec la base de données
* pour récupérer les tuiles associées à une série donnée.
*/
public class TileDatabaseManager {
private static final String DB_URL = "jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu";
private static final String USER = "akagundu";
private static final String PASSWORD = "dersim62Lodek";
/**
* Récupère les tuiles associées à une série spécifique à partir de la base de données.
*
* @param idSeries L'identifiant de la série pour laquelle les tuiles doivent être récupérées.
* @return Une liste d'objets <code>Tile</code> associés à la série spécifiée.
*/
public List<Tile> getTilesBySeries(int idSeries) {
List<Tile> tiles = new ArrayList<>();
String query = "SELECT id, couleur1, couleur2, chiffre FROM Tuile WHERE id_serie = ? ORDER BY id ASC";
@ -38,7 +49,4 @@ public class TileDatabaseManager {
}
return tiles;
}
}

@ -3,17 +3,31 @@ package view;
import javax.swing.*;
import java.awt.*;
/**
* La classe <code>App</code> représente l'application de jeu qui gère les vues de l'interface utilisateur.
* Elle utilise un <code>CardLayout</code> pour naviguer entre différentes vues telles que le menu, le jeu et le score.
*/
public class App {
/** Nom de la vue du menu. */
public static final String MENU_VIEW = "MenuView";
/** Nom de la vue du jeu. */
public static final String GAME_VIEW = "GameView";
/** Nom de la vue des scores. */
public static final String SCORE_VIEW = "ScoreView";
/** La fenêtre principale de l'application. */
private static JFrame frame;
/** Le layout utilisé pour gérer l'affichage des vues. */
private static CardLayout cardLayout;
/** Le panneau principal contenant les différentes vues. */
private static JPanel mainPanel;
static {
frame = new JFrame("DorfJavatik");
frame = new JFrame("Application de Jeu");
cardLayout = new CardLayout();
mainPanel = new JPanel(cardLayout);
frame.setContentPane(mainPanel);
@ -22,16 +36,32 @@ public class App {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* Retourne l'instance de la fenêtre principale.
*
* @return L'instance de <code>JFrame</code> de l'application.
*/
public static JFrame getInstance() {
return frame;
}
/**
* Ajoute une vue au panneau principal de l'application.
*
* @param view Le panneau de la vue à ajouter.
* @param viewName Le nom sous lequel la vue sera identifiée.
*/
public static void addView(JPanel view, String viewName) {
mainPanel.add(view, viewName);
}
/**
* Affiche la vue spécifiée dans le panneau principal.
*
* @param viewName Le nom de la vue à afficher.
*/
public static void showView(String viewName) {
cardLayout.show(mainPanel, viewName);
frame.setVisible(true);
}
}
}

@ -3,12 +3,20 @@ package view;
import javax.swing.JButton;
import java.awt.*;
/**
* La classe <code>BtnPerso</code> représente un bouton personnalisé utilisé dans l'interface utilisateur.
* Elle étend la classe <code>JButton</code> et applique des styles spécifiques pour le rendu du bouton.
*/
public class BtnPerso extends JButton {
/**
* Constructeur de la classe <code>BtnPerso</code>.
*
* @param text Le texte à afficher sur le bouton.
*/
public BtnPerso(String text){
super(text);
setFont(new Font("Helvetica", Font.BOLD,25));
setFont(new Font("Helvetica", Font.BOLD, 25));
setContentAreaFilled(false);
setForeground(Color.BLACK);
setBorderPainted(false);
@ -16,9 +24,7 @@ public class BtnPerso extends JButton {
setFocusPainted(false);
setBackground(new Color(243, 171, 115, 150));
Dimension d = new Dimension(200,50);
Dimension d = new Dimension(200, 50);
setPreferredSize(d);
}
}

@ -4,11 +4,23 @@ import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Color;
/**
* La classe <code>ButtonHoverListener</code> écoute les événements de la souris pour les boutons de type <code>BtnPerso</code>.
* Elle change la couleur de fond du bouton lorsque la souris survole ou quitte le bouton.
*/
public class ButtonHoverListener extends MouseAdapter {
private final Color hoverColor = new Color(200, 150, 100, 200); // Couleur de hover avec transparence
private final Color normalColor = new Color(243, 171, 115, 150); // Couleur normale avec transparence
/** Couleur de survol avec transparence. */
private final Color hoverColor = new Color(200, 150, 100, 200);
/** Couleur normale avec transparence. */
private final Color normalColor = new Color(243, 171, 115, 150);
/**
* Change la couleur de fond du bouton lorsqu'il est survolé par la souris.
*
* @param e L'événement de souris déclenché lorsque la souris entre dans le bouton.
*/
@Override
public void mouseEntered(MouseEvent e) {
if (e.getSource() instanceof BtnPerso) { // Applique uniquement aux boutons de type BtnPerso
@ -17,6 +29,11 @@ public class ButtonHoverListener extends MouseAdapter {
}
}
/**
* Restaure la couleur de fond normale du bouton lorsque la souris quitte le bouton.
*
* @param e L'événement de souris déclenché lorsque la souris quitte le bouton.
*/
@Override
public void mouseExited(MouseEvent e) {
if (e.getSource() instanceof BtnPerso) { // Applique uniquement aux boutons de type BtnPerso

@ -6,15 +6,39 @@ import controller.*;
import javax.swing.*;
import java.awt.*;
/**
* La classe <code>GameView</code> représente la vue principale du jeu.
* Elle gère l'affichage de la grille hexagonale, la prévisualisation de la prochaine tuile,
* et l'affichage du score. Elle implémente l'interface <code>GameEndListener</code>
* pour gérer la fin du jeu.
*/
public class GameView extends JPanel implements GameEndListener {
/** Le panneau de la grille hexagonale. */
private JPanel gridPanel;
/** La prévisualisation de la prochaine tuile. */
private HexagonTile nextTilePreview;
/** Le contrôleur du jeu. */
private GameController gameController;
/** Le contrôleur de la caméra. */
private CameraController cameraController;
/** Le contexte du jeu. */
private GameContext gameContext;
/** Étiquette affichant le score actuel. */
private JLabel scoreLabel;
/** Identifiant de la série de tuiles. */
private int seriesId;
/**
* Constructeur de la classe <code>GameView</code>.
*
* @param seriesId L'identifiant de la série de tuiles à charger.
*/
public GameView(int seriesId) {
this.seriesId = seriesId;
setLayout(new BorderLayout());
@ -55,6 +79,11 @@ public class GameView extends JPanel implements GameEndListener {
controlPanel.add(backButton);
}
/**
* Crée et retourne un panneau représentant la grille hexagonale.
*
* @return Un <code>JPanel</code> configuré pour la grille hexagonale.
*/
private JPanel createHexagonGrid() {
JPanel panel = new JPanel();
panel.setLayout(null);
@ -63,6 +92,9 @@ public class GameView extends JPanel implements GameEndListener {
return panel;
}
/**
* Centre le panneau de la grille dans la vue.
*/
private void centerGridPanel() {
int centerX = (getWidth() - gridPanel.getPreferredSize().width) / 2;
int centerY = (getHeight() - gridPanel.getPreferredSize().height) / 2;
@ -70,6 +102,11 @@ public class GameView extends JPanel implements GameEndListener {
gameContext.repaintGrid(gridPanel);
}
/**
* Crée et retourne un panneau de contrôle contenant les informations sur la prochaine tuile et le score.
*
* @return Un <code>JPanel</code> configuré pour le panneau de contrôle.
*/
private JPanel createControlPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
@ -92,6 +129,11 @@ public class GameView extends JPanel implements GameEndListener {
return panel;
}
/**
* Méthode appelée lorsque le jeu se termine.
*
* @param finalScore Le score final du jeu.
*/
@Override
public void onGameEnd(int finalScore) {
SwingUtilities.invokeLater(() -> {

@ -7,11 +7,27 @@ import javax.swing.*;
import java.awt.*;
import java.awt.geom.Path2D;
/**
* La classe <code>HexagonTile</code> représente une tuile hexagonale dans le jeu.
* Elle gère l'affichage d'une tuile avec ses segments de terrain et
* indique si la tuile est un placeholder.
*/
public class HexagonTile extends JPanel {
/** La tuile associée à cet hexagone. */
private Tile tile;
/** La position de l'hexagone sur la grille. */
private Point position;
private boolean isPlaceholder; // Indicateur si l'hexagone est un placeholder
/** Indicateur si l'hexagone est un placeholder. */
private boolean isPlaceholder;
/**
* Constructeur de la classe <code>HexagonTile</code>.
*
* @param position La position de l'hexagone sur la grille.
* @param isPlaceholder Indique si cet hexagone est un placeholder.
*/
public HexagonTile(Point position, boolean isPlaceholder) {
this.position = position;
this.isPlaceholder = isPlaceholder;
@ -19,24 +35,50 @@ public class HexagonTile extends JPanel {
setPreferredSize(new Dimension(100, 100));
}
/**
* Récupère la position de l'hexagone.
*
* @return La position de l'hexagone.
*/
public Point getPosition() {
return position;
}
/**
* Définit la tuile associée à cet hexagone.
*
* @param tile La tuile à associer.
*/
public void setTile(Tile tile) {
this.tile = tile;
this.isPlaceholder = false; // Une fois la tuile posée, ce n'est plus un placeholder
repaint();
}
/**
* Récupère la tuile associée à cet hexagone.
*
* @return La tuile associée.
*/
public Tile getTile() {
return tile;
}
/**
* Vérifie si l'hexagone est rempli avec une tuile.
*
* @return <code>true</code> si l'hexagone contient une tuile, sinon <code>false</code>.
*/
public boolean isFilled() {
return this.tile != null;
}
/**
* Méthode de peinture du composant.
* Dessine l'hexagone et ses segments de terrain, ou un placeholder si aucun terrain n'est présent.
*
* @param g Le contexte graphique dans lequel dessiner.
*/
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
@ -62,6 +104,14 @@ public class HexagonTile extends JPanel {
g2d.draw(largeHexagon);
}
/**
* Dessine les segments de terrain associés à la tuile.
*
* @param g2d Le contexte graphique dans lequel dessiner.
* @param centerX La coordonnée X du centre de l'hexagone.
* @param centerY La coordonnée Y du centre de l'hexagone.
* @param radius Le rayon de l'hexagone.
*/
private void drawTerrainSegments(Graphics2D g2d, int centerX, int centerY, int radius) {
// Parcourt les segments de 0 à 5 pour dessiner chaque segment en fonction du terrain associé
for (int i = 0; i < 6; i++) {
@ -71,6 +121,14 @@ public class HexagonTile extends JPanel {
}
}
/**
* Crée un hexagone à partir des coordonnées centrales et du rayon.
*
* @param centerX La coordonnée X du centre de l'hexagone.
* @param centerY La coordonnée Y du centre de l'hexagone.
* @param radius Le rayon de l'hexagone.
* @return La forme hexagonale créée.
*/
private Shape createHexagon(int centerX, int centerY, int radius) {
Path2D hexagon = new Path2D.Double();
for (int i = 0; i < 6; i++) {
@ -87,6 +145,12 @@ public class HexagonTile extends JPanel {
return hexagon;
}
/**
* Récupère la couleur associée à un type de terrain.
*
* @param terrain Le type de terrain à évaluer.
* @return La couleur correspondant au type de terrain.
*/
private Color getTerrainColor(TerrainType terrain) {
if (terrain == null) {
return Color.WHITE;

@ -3,8 +3,17 @@ package view;
import javax.swing.*;
import java.awt.*;
/**
* La classe <code>HowToPlayView</code> représente une boîte de dialogue
* qui fournit des instructions sur le fonctionnement du jeu.
*/
public class HowToPlayView extends JDialog {
/**
* Constructeur de la classe <code>HowToPlayView</code>.
*
* @param parent La fenêtre parent qui déclenche cette boîte de dialogue.
*/
public HowToPlayView(JFrame parent) {
super(parent, "Comment Jouer", true);
@ -21,6 +30,7 @@ public class HowToPlayView extends JDialog {
JLabel instruction2 = new JLabel("Poser des tuiles : clique gauche sur un petit hexagone");
JLabel instruction3 = new JLabel("Orientation des tuiles : Molette de la souris");
// Ajoute les instructions à la boîte de dialogue
for (JLabel label : new JLabel[]{instruction1, instruction2, instruction3}) {
label.setFont(new Font("Helvetica", Font.PLAIN, 20));
label.setAlignmentX(Component.CENTER_ALIGNMENT);

@ -5,6 +5,11 @@ import controller.SeriesSelector;
import javax.swing.*;
import java.awt.*;
/**
* La classe <code>MenuView</code> représente l'interface utilisateur principale
* du menu du jeu, incluant des options pour reprendre une partie, démarrer une nouvelle partie,
* et afficher les instructions du jeu.
*/
public class MenuView extends JPanel {
private BtnPerso resumeButton;
@ -21,15 +26,26 @@ public class MenuView extends JPanel {
private ImageIcon quit;
private JLabel labelImg;
/**
* Constructeur de la classe <code>MenuView</code>.
* Initialise le menu et ses composants.
*/
public MenuView() {
initMenu();
}
/**
* Définit le sélecteur de séries pour le menu.
*
* @param seriesSelector Le sélecteur de séries à définir.
*/
public void setSeriesSelector(SeriesSelector seriesSelector) {
this.seriesSelector = seriesSelector;
}
// Méthode pour afficher les boutons de sélection de série
/**
* Affiche les boutons de sélection de série.
*/
public void showSeriesButtons() {
howToPlayPanel.setVisible(false);
centeredPanel.removeAll();
@ -40,7 +56,9 @@ public class MenuView extends JPanel {
repaint();
}
// Méthode pour afficher/masquer le panneau "Comment jouer"
/**
* Affiche ou masque le panneau "Comment jouer".
*/
private void toggleHowToPlay() {
seriesPanel.setVisible(false);
howToPlayPanel.setVisible(!howToPlayPanel.isVisible());
@ -51,6 +69,9 @@ public class MenuView extends JPanel {
repaint();
}
/**
* Initialise le menu et ses composants.
*/
private void initMenu() {
panelCote = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
@ -116,6 +137,11 @@ public class MenuView extends JPanel {
add(centeredPanel, BorderLayout.CENTER);
}
/**
* Crée et retourne le panneau affichant les instructions de jeu.
*
* @return Un panneau contenant les instructions de jeu.
*/
private JPanel createHowToPlayPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
@ -145,6 +171,11 @@ public class MenuView extends JPanel {
return panel;
}
/**
* Crée et retourne le panneau de sélection des séries.
*
* @return Un panneau contenant les boutons de sélection de séries.
*/
private JPanel createSeriesPanel() {
JPanel panel = new JPanel(new GridLayout(2, 2, 10, 10));
panel.setOpaque(false);
@ -172,4 +203,4 @@ public class MenuView extends JPanel {
super.paintComponent(g);
g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), this);
}
}
}

@ -7,18 +7,33 @@ import java.util.ArrayList;
import java.util.Collections;
import controller.AllScore;
/**
* La classe <code>ScoreView</code> représente l'interface utilisateur
* affichant le score final du joueur ainsi que le top 10 des scores
* pour une série spécifique à la fin d'une partie.
*/
public class ScoreView extends JPanel {
private int seriesId;
private int finalScore;
private final Color hoverColor = new Color(200, 150, 100,150);
private final Color hoverColor = new Color(200, 150, 100, 150);
private final Color normalColor = new Color(243, 171, 115, 150); // Couleur avec transparence
/**
* Constructeur de la classe <code>ScoreView</code>.
*
* @param seriesId L'identifiant de la série.
* @param finalScore Le score final du joueur.
*/
public ScoreView(int seriesId, int finalScore) {
this.seriesId = seriesId;
this.finalScore = finalScore;
initScoreView();
}
/**
* Initialise l'interface utilisateur pour afficher le score final
* et le top 10 des scores.
*/
private void initScoreView() {
setLayout(new BorderLayout());
setBackground(normalColor);

BIN
src/main/mariadb.jar Normal file

Binary file not shown.