diff --git a/projet_linea/bin/BoutonScoresUtilisateur$1.class b/projet_linea/bin/BoutonScoresUtilisateur$1.class index aa7e8f0..8703d7b 100644 Binary files a/projet_linea/bin/BoutonScoresUtilisateur$1.class and b/projet_linea/bin/BoutonScoresUtilisateur$1.class differ diff --git a/projet_linea/bin/BoutonScoresUtilisateur.class b/projet_linea/bin/BoutonScoresUtilisateur.class index 7efbf48..a70cc61 100644 Binary files a/projet_linea/bin/BoutonScoresUtilisateur.class and b/projet_linea/bin/BoutonScoresUtilisateur.class differ diff --git a/projet_linea/bin/BoutonsManager$1.class b/projet_linea/bin/BoutonsManager$1.class new file mode 100644 index 0000000..3e2fe9f Binary files /dev/null and b/projet_linea/bin/BoutonsManager$1.class differ diff --git a/projet_linea/bin/BoutonsManager.class b/projet_linea/bin/BoutonsManager.class new file mode 100644 index 0000000..b0101f3 Binary files /dev/null and b/projet_linea/bin/BoutonsManager.class differ diff --git a/projet_linea/bin/CadreDeConnexion.class b/projet_linea/bin/CadreDeConnexion.class index 72bf9ee..61efa2f 100644 Binary files a/projet_linea/bin/CadreDeConnexion.class and b/projet_linea/bin/CadreDeConnexion.class differ diff --git a/projet_linea/bin/Jeu.class b/projet_linea/bin/Jeu.class index 9872cd2..6000da7 100644 Binary files a/projet_linea/bin/Jeu.class and b/projet_linea/bin/Jeu.class differ diff --git a/projet_linea/bin/MenuPrincipal.class b/projet_linea/bin/MenuPrincipal.class new file mode 100644 index 0000000..2bee24a Binary files /dev/null and b/projet_linea/bin/MenuPrincipal.class differ diff --git a/projet_linea/bin/ZoneDessin.class b/projet_linea/bin/ZoneDessin.class index a0a61a2..7a83ceb 100644 Binary files a/projet_linea/bin/ZoneDessin.class and b/projet_linea/bin/ZoneDessin.class differ diff --git a/projet_linea/src/Jeu.java b/projet_linea/src/Jeu.java index 0ad17ba..0f25080 100644 --- a/projet_linea/src/Jeu.java +++ b/projet_linea/src/Jeu.java @@ -14,7 +14,7 @@ public class Jeu implements KeyListener, ActionListener{ //------------------------------------------------------------------------- // Ecran : instance de ZoneDessin, qui contiendra tous les objets graphiques - // On ne vapas créer directement l'écran car ça va créer un flash + // On ne va pas créer directement l'écran car ça va créer un flash // Dès le lancement du jeu avec l'image de fond par défaut et l'imga du niveau // et les animera protected ZoneDessin ecran; diff --git a/projet_linea/src/MenuPrincipal.java b/projet_linea/src/MenuPrincipal.java new file mode 100644 index 0000000..73a9cb5 --- /dev/null +++ b/projet_linea/src/MenuPrincipal.java @@ -0,0 +1,113 @@ +import javax.swing.*; +import java.awt.*; + +// ★★★ CLASSE CREEE PAR L'UTILISATEUR ★★★ +// Fichier : MenuPrincipal.java (nouveau fichier) +// Objectif : afficher un menu d'accueil APRES la connexion réussie +// Remplace : l'ancien démarrage direct du jeu après connexion +// Fonctionnalités : 2 boutons (Lancer le jeu / Voir mes scores) + +// Fenêtre du menu principal affichée après la connexion +public class MenuPrincipal extends JFrame { + + // ID de l'utilisateur connecté + private final int utilisateurId; + + // Constructeur du menu principal + // Affiche un écran d'accueil avec deux options : "Lancer le jeu" et "Voir mes scores" + // ★★★ CONSTRUCTEUR CREE PAR L'UTILISATEUR ★★★ + // Nouveau : il n'existait pas avant, crée le menu principal + public MenuPrincipal(int utilisateurId, String userName) { + // Sauvegarde l'ID pour l'utiliser lors des appels à la base de données + this.utilisateurId = utilisateurId; + + // Configuration de la fenêtre + setTitle("Menu Principal - Linea"); // Titre de la fenêtre + setSize(800, 600); // Dimensions de la fenêtre + setDefaultCloseOperation(EXIT_ON_CLOSE); // Quitter l'app à la fermeture + setLocationRelativeTo(null); // Centre la fenêtre + + // Crée le panneau principal avec un fond sombre + JPanel panel = new JPanel(new GridBagLayout()); // GridBagLayout pour centrage + panel.setBackground(new Color(30, 30, 30)); // Fond gris très foncé + add(panel); + + // Crée une boîte verticale pour disposer les éléments de haut en bas + Box box = Box.createVerticalBox(); // Disposition verticale + box.setAlignmentX(Component.CENTER_ALIGNMENT); // Centré horizontalement + + // Crée un titre de bienvenue personalisé avec le nom de l'utilisateur + JLabel titre = new JLabel("Bienvenue, " + userName + " !"); + titre.setForeground(Color.WHITE); // Texte blanc + titre.setFont(new Font("Arial", Font.BOLD, 26)); // Police Arial gras 26pt + titre.setAlignmentX(Component.CENTER_ALIGNMENT); // Centré + + // Crée le bouton "Lancer le jeu" pour démarrer une partie + JButton demarrer = new JButton("Lancer le jeu"); + demarrer.setBackground(new Color(70, 130, 180)); // Couleur bleu acier + demarrer.setForeground(Color.WHITE); // Texte blanc + demarrer.setFocusPainted(false); // Pas de bordure au focus + demarrer.setMaximumSize(new Dimension(220, 40)); // Dimension du bouton + demarrer.setAlignmentX(Component.CENTER_ALIGNMENT); // Centré horizontalement + + + // Au clic, ferme ce menu et lance le jeu + // ★★★ ACTION MODIFIEE PAR L'UTILISATEUR ★★★ + // Lance le jeu APRES fermeture du menu (ajout du menu principal) + demarrer.addActionListener(e -> { + // Ferme la fenêtre de menu + dispose(); + // Crée une instance du jeu avec l'ID utilisateur (authentifié) + Jeu jeu = new Jeu(utilisateurId); + // Démarre l'affichage et l'initialisation du jeu + jeu.demarrer(); + }); + + // Crée le bouton "Voir mes scores" pour afficher l'historique + // ★★★ NOUVEAU BOUTON PAR L'UTILISATEUR ★★★ + // Nouvelle fonctionnalité : permet de voir les scores AVANT de lancer le jeu + // Utilise les méthodes : GestionBDD.recupererScoresUtilisateur() + // GestionBDD.recupererMeilleurScoreUtilisateur() + JButton scores = new JButton("Voir mes scores"); + scores.setBackground(new Color(70, 130, 180)); // Couleur bleu acier (même que demarrer) + scores.setForeground(Color.WHITE); // Texte blanc + scores.setFocusPainted(false); // Pas de bordure au focus + scores.setMaximumSize(new Dimension(220, 40)); // Dimension du bouton + scores.setAlignmentX(Component.CENTER_ALIGNMENT); // Centré horizontalement + + + // Au clic, récupère et affiche les scores depuis la base de données + // ★★★ ACTION PAR L'UTILISATEUR ★★★ + // Nouvelle action : afficher les scores historiques du joueur dans une popup + // Récupère : tous les scores + le meilleur score + scores.addActionListener(e -> { + // Récupère la liste de tous les scores de l'utilisateur depuis la BD + java.util.List scoreList = GestionBDD.recupererScoresUtilisateur(utilisateurId); + // Récupère aussi le meilleur score (score maximum) depuis la BD + int meilleurScore = GestionBDD.recupererMeilleurScoreUtilisateur(utilisateurId); + + // Construit un message texte avec tous les scores à afficher + StringBuilder message = new StringBuilder(); + message.append("Meilleur score : ").append(meilleurScore).append("\n\n"); + message.append("Tous les scores :\n"); + + // Ajoute chaque score à la liste, un par un + for (int s : scoreList) { + message.append(s).append("\n"); + } + + // Affiche les scores dans une boîte de dialogue popup + JOptionPane.showMessageDialog(this, message.toString(), "Mes Scores", JOptionPane.INFORMATION_MESSAGE); + }); + + // Ajoute tous les éléments dans la boîte + box.add(titre); + box.add(Box.createVerticalStrut(40)); // Espace de 40 pixels après le titre + box.add(demarrer); + box.add(Box.createVerticalStrut(15)); // Espace de 15 pixels entre les deux boutons + box.add(scores); + + // Ajoute la boîte au panneau principal + panel.add(box); + } +} diff --git a/projet_linea/src/ZoneDessin.class b/projet_linea/src/ZoneDessin.class deleted file mode 100644 index 3a893aa..0000000 Binary files a/projet_linea/src/ZoneDessin.class and /dev/null differ