Pair Programming ( merci bamba ) CardLayout

This commit is contained in:
Vincent 2024-10-27 18:31:33 +01:00
parent 50d9ee2f58
commit 0fdd38bdae
26 changed files with 292 additions and 161 deletions

@ -21,7 +21,7 @@ public class AllScore {
"jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu",
"akagundu", "dersim62Lodek");
try{
PreparedStatement pst = cnx.prepareStatement("SELECT score from score where id_serie=?;");
PreparedStatement pst = cnx.prepareStatement("SELECT Score from score where id_serie=?;");
pst.setInt(1, idSerie);
ResultSet rs = pst.executeQuery();
while(rs.next()) {

@ -1,9 +1,7 @@
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class SendScore {
public void insertscore(int idSerie,int score) {
@ -18,7 +16,7 @@ public class SendScore {
"jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu",
"akagundu", "dersim62Lodek");
try{
PreparedStatement pst = cnx.prepareStatement("INSERT INTO score (id_serie, score) VALUES (?, ?);");
PreparedStatement pst = cnx.prepareStatement("INSERT INTO Score (id_serie, score) VALUES (?, ?);");
pst.setInt(1, idSerie);
pst.setInt(2, score);
pst.executeUpdate();

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bin/view/ScoreView$1.class Normal file

Binary file not shown.

BIN
bin/view/ScoreView.class Normal file

Binary file not shown.

@ -1,8 +1,4 @@
package main;
import model.MenuModel;
import controller.MenuController;
import controller.SeriesSelector;
import view.*;
import javax.sound.sampled.AudioInputStream;
@ -14,21 +10,9 @@ import java.net.URL;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MenuModel model = new MenuModel();
MenuView view = new MenuView();
// Initialiser SeriesSelector et le passer à MenuView
SeriesSelector seriesSelector = new SeriesSelector();
view.setSeriesSelector(seriesSelector);
// Créer MenuController avec model, view et seriesSelector
new MenuController(model, view, seriesSelector);
JFrame frame = App.getInstance();
frame.add(view);
frame.setVisible(true);
PlayMusic("/Music/audio.wav");
MenuView menuView = new MenuView();
App.addView(menuView, App.MENU_VIEW);
App.showView(App.MENU_VIEW);
});
}

@ -0,0 +1,39 @@
package controller;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class AllScore {
public static ArrayList<Integer> getScoresForSeries(int idSerie) {
ArrayList<Integer> scores = new ArrayList<>();
try {
Class.forName("org.mariadb.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.err.println("Erreur : pilote JDBC non trouvé");
System.exit(1);
}
try (Connection cnx = DriverManager.getConnection(
"jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu",
"akagundu", "dersim62Lodek")) {
try (PreparedStatement pst = cnx.prepareStatement("SELECT score FROM Score WHERE id_serie=? ORDER BY score DESC LIMIT 10")) {
pst.setInt(1, idSerie);
try (ResultSet rs = pst.executeQuery()) {
while (rs.next()) {
scores.add(rs.getInt("score"));
}
}
}
} catch (SQLException e) {
System.err.println("Erreur de connexion ou d'exécution de la requête SQL");
e.printStackTrace();
}
return scores;
}
}

@ -1,3 +1,4 @@
// src/main/java/controller/GameController.java
package controller;
import model.Tile;
@ -20,22 +21,25 @@ public class GameController implements TilePlacer {
private TileDatabaseManager dbManager;
private List<Tile> currentTiles;
private int tileIndex;
private ScoreGameContext scoreGameContext; // Nouveau contexte pour le score
private ScoreGameContext scoreGameContext;
public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview, JLabel scoreLabel) {
private int placedTileCount = 0;
private int seriesId;
private GameEndListener gameEndListener;
public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview, JLabel scoreLabel, int seriesId, GameEndListener gameEndListener) {
this.seriesId = seriesId;
this.gameContext = gameContext;
this.gridPanel = gridPanel;
this.hexagonMap = gameContext.getHexagonMap();
this.availablePositions = gameContext.getAvailablePositions();
this.nextTilePreview = nextTilePreview;
this.dbManager = new TileDatabaseManager();
this.tileIndex = 0;
// Initialisation de ScoreGameContext
this.scoreGameContext = new ScoreGameContext(gameContext, scoreLabel);
this.gameEndListener = gameEndListener;
loadSeries(1); // Charger la série par défaut (ex. série 1)
loadSeries(seriesId);
updatePreview();
}
@ -54,16 +58,12 @@ public class GameController implements TilePlacer {
return;
}
System.out.println("Placement de la tuile avec ID : " + (nextTile != null ? nextTile.getId() : "null") + " à la position : " + position);
hexTile.setTile(nextTile); // Place la tuile actuelle
hexTile.setTile(nextTile);
gridPanel.revalidate();
gridPanel.repaint();
availablePositions.remove(position);
Point[] adjacentPositions = getAdjacentPositions(position);
for (Point adj : adjacentPositions) {
for (Point adj : getAdjacentPositions(position)) {
if (!hexagonMap.containsKey(adj)) {
availablePositions.add(adj);
addHexagonTile(adj, gridPanel, 50, null, null);
@ -71,38 +71,43 @@ public class GameController implements TilePlacer {
}
gameContext.repaintGrid(gridPanel);
generateNextTile(); // Génère la tuile suivante
// Calcul et mise à jour du score
generateNextTile();
scoreGameContext.calculateScore();
placedTileCount++;
if (placedTileCount >= 50) {
endGame(); // Appeler endGame pour terminer la partie
}
}
}
private void endGame() {
int finalScore = scoreGameContext.getScore();
// Enregistrer le score dans la base de données
new SendScore().insertscore(seriesId, finalScore);
// Notifiez le listener de la fin de la partie
if (gameEndListener != null) {
gameEndListener.onGameEnd(finalScore);
}
}
public void initializeGame(CameraController cameraController) {
generateNextTile(); // Génère la première tuile et assigne une tuile valide à `nextTile`
Tile initialTile = getNextTile(); // Récupère la tuile générée
generateNextTile();
Tile initialTile = getNextTile();
if (initialTile == null) {
System.out.println("Erreur : aucune tuile initiale générée.");
return; // Arrête l'initialisation si aucune tuile n'a été générée
return;
}
System.out.println("ID de la tuile initiale générée : " + initialTile.getId()); // Affiche l'ID de la tuile initiale
int centerX = gridPanel.getPreferredSize().width / 2;
int centerY = gridPanel.getPreferredSize().height / 2;
Point initialPosition = new Point(0, 0);
initialPosition.setLocation(centerX / 50, centerY / 50); // Calcule la position centrale
placeInitialTile(initialPosition, cameraController, initialTile); // Place la première tuile
// Calculer et mettre à jour le score incluant la première tuile
Point initialPosition = new Point(centerX / 50, centerY / 50);
placeInitialTile(initialPosition, cameraController, initialTile);
scoreGameContext.calculateScore();
generateNextTile(); // Génère la tuile suivante
generateNextTile();
}
public void placeInitialTile(Point position, CameraController cameraController, Tile tile) {
if (tile == null) {
@ -110,16 +115,13 @@ public class GameController implements TilePlacer {
return;
}
System.out.println("Placement de la tuile initiale avec ID : " + tile.getId() + " à la position : " + position);
addHexagonTile(position, gridPanel, 50, cameraController, tile);
availablePositions.remove(position);
addHexagonTile(position, gridPanel, 50, cameraController, tile); // Place la première tuile
availablePositions.remove(position); // Marque la position comme occupée
Point[] adjacentPositions = getAdjacentPositions(position);
for (Point adj : adjacentPositions) {
for (Point adj : getAdjacentPositions(position)) {
if (!hexagonMap.containsKey(adj)) {
availablePositions.add(adj);
addHexagonTile(adj, gridPanel, 50, cameraController, null); // Placeholder vide pour les positions adjacentes
addHexagonTile(adj, gridPanel, 50, cameraController, null);
}
}
}
@ -143,18 +145,15 @@ public class GameController implements TilePlacer {
yOffset += (int) (Math.sqrt(3) * hexSize / 2);
}
boolean isPlaceholder = (tile == null); // Si tile est null, c'est un placeholder
boolean isPlaceholder = (tile == null);
HexagonTile hexTile = new HexagonTile(position, isPlaceholder);
if (tile != null) {
hexTile.setTile(tile);
} else {
System.out.println("Aucun tile n'a été fourni pour cette position : " + position);
}
hexTile.setBounds(xOffset, yOffset, hexSize, hexSize);
hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions));
hexagonMap.put(position, hexTile);
panel.add(hexTile);
panel.revalidate();
@ -164,21 +163,19 @@ public class GameController implements TilePlacer {
public void generateNextTile() {
if (tileIndex < currentTiles.size()) {
nextTile = currentTiles.get(tileIndex++);
System.out.println("Génération de la prochaine tuile avec ID : " + nextTile.getId() + " (index " + tileIndex + ")");
updatePreview(); // Met à jour l'aperçu de la tuile suivante
updatePreview();
} else {
nextTile = null; // Fin de la série, plus de tuiles à placer
updatePreview(); // Met à jour l'aperçu pour refléter l'absence de prochaine tuile
System.out.println("Fin de la série. Plus de tuiles à placer.");
nextTile = null;
updatePreview();
}
}
private void updatePreview() {
if (nextTilePreview != null) {
if (nextTile != null) {
nextTilePreview.setTile(nextTile); // Met à jour avec une tuile valide
nextTilePreview.setTile(nextTile);
} else {
nextTilePreview.setTile(null); // Affiche un placeholder ou un message si `nextTile` est null
nextTilePreview.setTile(null);
}
nextTilePreview.repaint();
}

@ -0,0 +1,5 @@
package controller;
public interface GameEndListener {
void onGameEnd(int finalScore);
}

@ -1,15 +0,0 @@
package controller;
import model.MenuModel;
import view.MenuView;
public class MenuController {
public MenuController(MenuModel model, MenuView view, SeriesSelector seriesSelector) {
// Assignation des action listeners aux boutons du menu
view.getQuiButton().addActionListener(new QuiListener()); // Quitte l'application
// Définir le sélecteur de séries
view.setSeriesSelector(seriesSelector);
}
}

@ -0,0 +1,30 @@
package controller;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class SendScore {
public void insertscore(int idSerie, int score) {
try {
Class.forName("org.mariadb.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.err.println("Erreur : pilote JDBC non trouvé");
System.exit(1);
}
try (Connection cnx = DriverManager.getConnection(
"jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu",
"akagundu", "dersim62Lodek")) {
try (PreparedStatement pst = cnx.prepareStatement("INSERT INTO Score (id_serie, score) VALUES (?, ?);")) {
pst.setInt(1, idSerie);
pst.setInt(2, score);
pst.executeUpdate();
}
} catch (SQLException e) {
System.err.println("Erreur de connexion ou d'exécution de la requête SQL");
e.printStackTrace();
}
}
}

@ -1,10 +0,0 @@
package model;
public class MenuModel {
public MenuModel() {
// rien du tout pour l'instant
}
}

@ -1,17 +1,37 @@
package view;
import javax.swing.*;
import java.awt.*;
public class App {
public static final String MENU_VIEW = "MenuView";
public static final String GAME_VIEW = "GameView";
public static final String SCORE_VIEW = "ScoreView";
private static JFrame frame;
private static CardLayout cardLayout;
private static JPanel mainPanel;
static {
frame = new JFrame("Application de Jeu");
cardLayout = new CardLayout();
mainPanel = new JPanel(cardLayout);
frame.setContentPane(mainPanel);
frame.setSize(1500, 750);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static JFrame getInstance() {
if (frame == null) {
frame = new JFrame("Menu");
frame.setSize(1500, 750);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
return frame;
}
}
public static void addView(JPanel view, String viewName) {
mainPanel.add(view, viewName);
}
public static void showView(String viewName) {
cardLayout.show(mainPanel, viewName);
frame.setVisible(true);
}
}

@ -1,31 +1,23 @@
// src/main/java/view/GameView.java
package view;
import controller.GameController;
import controller.CameraController;
import controller.GameContext;
import controller.MouseWheelController;
import controller.*;
import javax.swing.*;
import java.awt.*;
public class GameView extends JFrame {
public class GameView extends JPanel implements GameEndListener {
private JPanel gridPanel;
private HexagonTile nextTilePreview;
private GameController gameController;
private CameraController cameraController;
private GameContext gameContext;
private JLabel scoreLabel;
// Couleurs pour le style
private final Color hoverColor = new Color(200, 150, 100); // Couleur de hover avec transparence
private final Color normalColor = new Color(243, 171, 115); // Couleur normale avec transparence
private int seriesId;
public GameView(int seriesId) {
setTitle("Jeu de Tuiles");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.seriesId = seriesId;
setLayout(new BorderLayout());
setSize(1500, 750);
setLocationRelativeTo(null);
gameContext = new GameContext();
gridPanel = createHexagonGrid();
@ -34,27 +26,39 @@ public class GameView extends JFrame {
nextTilePreview = new HexagonTile(null, false);
scoreLabel = new JLabel("Score: 0");
scoreLabel.setForeground(Color.BLACK); // Texte noir pour contraste
scoreLabel.setForeground(Color.BLACK);
JPanel controlPanel = createControlPanel();
controlPanel.setPreferredSize(new Dimension(200, 600));
controlPanel.setPreferredSize(new Dimension(200, getPreferredSize().height));
add(controlPanel, BorderLayout.EAST);
gameController = new GameController(gameContext, gridPanel, nextTilePreview, scoreLabel);
gameController.loadSeries(seriesId); // Charge la série
gameController = new GameController(gameContext, gridPanel, nextTilePreview, scoreLabel, seriesId, this);
gameController.loadSeries(seriesId);
cameraController = new CameraController(gridPanel, gameContext);
MouseWheelController wheelController = new MouseWheelController(nextTilePreview, gameController);
addMouseWheelListener(wheelController);
gameController.initializeGame(cameraController);
setVisible(true);
JButton backButton = new JButton("Retour");
backButton.setPreferredSize(new Dimension(100, 40));
backButton.setBackground(new Color(202, 146, 104));
backButton.setForeground(Color.BLACK);
backButton.setFocusPainted(false);
backButton.setBorderPainted(false);
backButton.addActionListener(e -> {
App.showView(App.MENU_VIEW);
});
controlPanel.add(backButton);
}
private JPanel createHexagonGrid() {
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(normalColor); // Couleur de fond de la grille
panel.setBackground(new Color(243, 171, 115));
panel.setPreferredSize(new Dimension(800, 800));
return panel;
}
@ -69,16 +73,16 @@ public class GameView extends JFrame {
private JPanel createControlPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setBackground(normalColor); // Couleur normale pour le panneau de contrôle
panel.setBackground(new Color(243, 171, 115));
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JLabel nextTileLabel = new JLabel("Prochaine tuile : ");
nextTileLabel.setForeground(Color.BLACK); // Texte noir pour contraste
nextTileLabel.setForeground(Color.BLACK);
panel.add(nextTileLabel);
panel.add(Box.createRigidArea(new Dimension(0, 10)));
nextTilePreview.setPreferredSize(new Dimension(150, 150));
nextTilePreview.setBackground(hoverColor); // Couleur hover pour différencier
nextTilePreview.setBackground(new Color(200, 150, 100));
nextTilePreview.setOpaque(true);
panel.add(nextTilePreview);
@ -87,4 +91,13 @@ public class GameView extends JFrame {
return panel;
}
@Override
public void onGameEnd(int finalScore) {
SwingUtilities.invokeLater(() -> {
ScoreView scoreView = new ScoreView(seriesId, finalScore);
App.addView(scoreView, App.SCORE_VIEW);
App.showView(App.SCORE_VIEW);
});
}
}

@ -1,10 +1,11 @@
package view;
import controller.SeriesSelector;
import javax.swing.*;
import java.awt.*;
import controller.SeriesSelector;
public class MenuView extends JComponent {
public class MenuView extends JPanel {
private BtnPerso resumeButton;
private BtnPerso newGameButton;
@ -18,7 +19,7 @@ public class MenuView extends JComponent {
private Image backgroundImage;
private ImageIcon logo;
private ImageIcon quit;
private JLabel labelImg; // Déclaration de labelImg
private JLabel labelImg;
public MenuView() {
initMenu();
@ -51,68 +52,56 @@ public class MenuView extends JComponent {
}
private void initMenu() {
// Initialisation du panneau latéral
panelCote = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
panelCote.setBackground(new Color(243, 171, 115, 150));
panelCote.setPreferredSize(new Dimension(300, 0));
// Charger les images
backgroundImage = new ImageIcon(getClass().getResource("/java/view/img/bg.png")).getImage();
logo = new ImageIcon(getClass().getResource("/java/view/img/D.png"));
quit = new ImageIcon(getClass().getResource("/java/view/img/quit.png"));
// Redimensionnement des images
Image quit1 = quit.getImage();
Image lg = logo.getImage();
Image resizedlg = lg.getScaledInstance(300, 300, Image.SCALE_SMOOTH);
labelImg = new JLabel(new ImageIcon(resizedlg)); // Initialisation de labelImg
labelImg = new JLabel(new ImageIcon(resizedlg));
// Configuration du bouton "Quitter" avec une icône redimensionnée
int buttonWidth = 65;
int buttonHeight = 40;
Image resizedImage = quit1.getScaledInstance(buttonWidth, buttonHeight, Image.SCALE_SMOOTH);
ImageIcon resizedIcon = new ImageIcon(resizedImage);
// Boutons
resumeButton = new BtnPerso("JOUER");
newGameButton = new BtnPerso("COMMENT JOUER");
quitButton = new JButton(resizedIcon);
// Configurer le bouton "Quitter" pour enlever le fond et la bordure
quitButton.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
quitButton.setBackground(new Color(243, 171, 115, 150)); // Fond transparent similaire
quitButton.setBorderPainted(false); // Enlever la bordure pour un look plus propre
quitButton.setOpaque(true); // Rendre le fond visible
quitButton.setFocusPainted(false); // Enlever le focus autour du bouton
quitButton.setBackground(new Color(243, 171, 115, 150));
quitButton.setBorderPainted(false);
quitButton.setOpaque(true);
quitButton.setFocusPainted(false);
// Ajout des listeners pour les boutons
resumeButton.addActionListener(e -> showSeriesButtons());
newGameButton.addActionListener(e -> toggleHowToPlay());
// Créer le panneau "Comment jouer" et le panneau de séries
howToPlayPanel = createHowToPlayPanel();
howToPlayPanel.setVisible(false);
seriesPanel = createSeriesPanel();
seriesPanel.setVisible(false);
// Panneau centré pour le contenu dynamique
centeredPanel = new JPanel(new GridBagLayout());
centeredPanel.setOpaque(false);
centeredPanel.add(howToPlayPanel);
// Ajout des composants au panneau latéral
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(10, 10, 10, 10);
gbc.weightx = 1.0;
gbc.gridx = 0;
// Ajouter l'image de logo
gbc.gridy = 0;
panelCote.add(labelImg, gbc); // Ajout de labelImg ici
panelCote.add(labelImg, gbc);
// Ajouter les boutons
gbc.gridy = 1;
panelCote.add(resumeButton, gbc);
@ -164,6 +153,9 @@ public class MenuView extends JComponent {
int seriesId = i;
BtnPerso seriesButton = new BtnPerso("Série " + seriesId);
seriesButton.addActionListener(e -> {
GameView gameView = new GameView(seriesId);
App.addView(gameView, App.GAME_VIEW);
App.showView(App.GAME_VIEW);
if (seriesSelector != null) {
seriesSelector.startGameWithSeries(seriesId);
}
@ -180,16 +172,4 @@ public class MenuView extends JComponent {
super.paintComponent(g);
g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), this);
}
public BtnPerso getResumeButton() {
return resumeButton;
}
public BtnPerso getNewGameButton() {
return newGameButton;
}
public JButton getQuiButton() {
return quitButton;
}
}
}

@ -0,0 +1,90 @@
// src/main/java/view/ScoreView.java
package view;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collections;
import controller.AllScore;
public class ScoreView extends JPanel {
private int seriesId;
private int finalScore;
private final Color hoverColor = new Color(200, 150, 100,150);
private final Color normalColor = new Color(243, 171, 115, 150); // Couleur avec transparence
public ScoreView(int seriesId, int finalScore) {
this.seriesId = seriesId;
this.finalScore = finalScore;
initScoreView();
}
private void initScoreView() {
setLayout(new BorderLayout());
setBackground(normalColor);
// Titre de la vue de score
JLabel title = new JLabel("Fin de la Partie", JLabel.CENTER);
title.setFont(new Font("Helvetica", Font.BOLD, 30));
add(title, BorderLayout.NORTH);
// Affichage du score actuel de la partie
JLabel scoreLabel = new JLabel("Votre Score : " + finalScore, JLabel.CENTER);
scoreLabel.setFont(new Font("Helvetica", Font.PLAIN, 20));
add(scoreLabel, BorderLayout.CENTER);
// Panneau des scores du top 10
JPanel topScoresPanel = new JPanel();
topScoresPanel.setLayout(new BoxLayout(topScoresPanel, BoxLayout.Y_AXIS));
topScoresPanel.setBorder(BorderFactory.createTitledBorder("Top 10 des Scores"));
topScoresPanel.setBackground(normalColor);
ArrayList<Integer> scores = AllScore.getScoresForSeries(seriesId);
Collections.sort(scores, Collections.reverseOrder());
scores = new ArrayList<>(scores.subList(0, Math.min(10, scores.size())));
for (Integer score : scores) {
JLabel scoreItem = new JLabel(score.toString(), JLabel.CENTER);
scoreItem.setFont(new Font("Helvetica", Font.PLAIN, 18));
scoreItem.setAlignmentX(Component.CENTER_ALIGNMENT);
// Marquer le score final en couleur spéciale
if (score == finalScore) {
scoreItem.setForeground(new Color(128, 0, 128)); // Violet pour le score actuel
} else {
scoreItem.setForeground(Color.BLACK);
}
topScoresPanel.add(scoreItem);
}
add(topScoresPanel, BorderLayout.CENTER);
// Bouton de retour au menu
BtnPerso backButton = new BtnPerso("Retour au Menu");
backButton.addActionListener(e -> App.showView(App.MENU_VIEW));
backButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
backButton.setBackground(hoverColor);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
backButton.setBackground(normalColor);
}
});
// Panneau de score actuel
JPanel currentScorePanel = new JPanel();
currentScorePanel.setBackground(normalColor);
JLabel currentScoreLabel = new JLabel("Score Actuel : " + finalScore);
currentScoreLabel.setFont(new Font("Helvetica", Font.BOLD, 22));
currentScorePanel.add(currentScoreLabel);
// Ajouter le panneau de score actuel et le bouton de retour
JPanel southPanel = new JPanel(new BorderLayout());
southPanel.add(currentScorePanel, BorderLayout.NORTH);
southPanel.add(backButton, BorderLayout.SOUTH);
add(southPanel, BorderLayout.SOUTH);
}
}