diff --git a/projet_linea/src/Jeu.java b/projet_linea/src/Jeu.java index 77b8303..b4719ca 100644 --- a/projet_linea/src/Jeu.java +++ b/projet_linea/src/Jeu.java @@ -61,6 +61,12 @@ public class Jeu implements KeyListener, ActionListener{ protected Niveau niveauEnCours; protected int segmentsTermines = 0; // Variable compteur de segments protected Segment dernierSegmentValide = null; + + // On sauvegarde la fenêtre principale de la partie en cours dans une variable. + // Cela nous permettra de la fermer proprement (avec la méthode .dispose()) + // quand le joueur voudra lancer une nouvelle partie. + protected JFrame fenetrePrincipale; + protected javax.swing.JButton btnRejouer; //------------------------------------------------------------------------- // METHODES @@ -206,6 +212,7 @@ public class Jeu implements KeyListener, ActionListener{ // Création d'une fenêtre JFrame fenetre = new JFrame(); + this.fenetrePrincipale = fenetre; // On sauvegarde la fenêtre principale de la partie en cours dans une variable. Cela nous permettra de la fermer proprement (avec la méthode .dispose()) quand le joueur voudra lancer une nouvelle partie. // A FAIRE : // placer dans l'instance de l'écran tous les objets graphiques nécessaires @@ -252,6 +259,43 @@ public class Jeu implements KeyListener, ActionListener{ //demiCercleArriere.setCouleur(new Color(26, 95, 161)); //demiCercleAvant.setCouleur(new Color(26, 95, 161)); ecran.ajouterObjet(itemCourant); + javax.swing.JButton bscores = BoutonsManager.creerBoutonScores(fenetre, utilisateurId); + this.ecran.add(bscores); + + // On initialise le bouton avec son texte + btnRejouer = new javax.swing.JButton("Rejouer"); + + // Positionnement absolu sur l'écran : (x, y, largeur, hauteur) + // On le place vers le centre (x=300), un peu vers le bas (y=400) + // pour qu'il apparaisse proprement sous le grand texte "Game Over" + btnRejouer.setBounds(300, 400, 200, 50); + + btnRejouer.setBackground(new java.awt.Color(46, 204, 113)); + btnRejouer.setForeground(java.awt.Color.WHITE); + btnRejouer.setFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 20)); + + + // TRÈS IMPORTANT : Le bouton est invisible tant que la partie est en cours ! + // Il ne s'affichera qu'au moment précis où on perd (ou gagne). + btnRejouer.setVisible(false); + btnRejouer.addActionListener(e -> { + + // ÉTAPE 1 : On détruit la fenêtre de la partie actuelle. + // Cela libère la mémoire et ferme l'écran du jeu fini. + fenetrePrincipale.dispose(); + + // ÉTAPE 2 : On crée une toute nouvelle instance de Jeu, + // On lui repasse l'ID de l'utilisateur pour qu'il reste connecté à son compte. + Jeu nouveauJeu = new Jeu(this.utilisateurId); + + // ÉTAPE 3 : On lance cette nouvelle partie. + // Cela va automatiquement créer une nouvelle fenêtre, remettre le score à 0, + // et recharger le niveau 1. C'est magique ! + nouveauJeu.demarrer(); + }); + + // Enfin, on ajoute physiquement le bouton à notre ZoneDessin (l'écran) + this.ecran.add(btnRejouer); } @@ -297,6 +341,9 @@ public class Jeu implements KeyListener, ActionListener{ JOptionPane.showMessageDialog(fenetre, "CONGRATULATIONS !!! BRAVO VOUS AVEZ TERMINE LE JEU"); System.out.println("Fin du jeu !!! BRAVO VOUS AVEZ TERMINE LE JEU"); horloge.stop(); + if (btnRejouer != null) { + btnRejouer.setVisible(true); + } } } @@ -422,7 +469,8 @@ public class Jeu implements KeyListener, ActionListener{ if (this.laLigne.getSegCourant()!=null && !this.modeTriche) { // Le jeu s'arrête si le joueur n'a pas traversé la première ligne this.horloge.stop(); // 1. Arrêter le temps this.ecran.partiePerdue = true; // 2. Signaler à l'écran - this.ecran.repaint(); // 3. Forcer l'affichage du texte + this.btnRejouer.setVisible(true); // 3. Afficher le bouton "Rejouer" + this.ecran.repaint(); // 4. Forcer l'affichage du texte GestionBDD.ajouterScore((int)this.score, this.utilisateurId);// enregistrement du score dans la base de donne }