From 06e09a975324343442b0d3b682e1b40a13ee4b24 Mon Sep 17 00:00:00 2001
From: Azurlors <florianrichard2001@gmail.com>
Date: Sat, 31 Dec 2022 17:14:05 +0100
Subject: [PATCH] =?UTF-8?q?Ajout=20du=20choix=20du=20perso=20+=20retry=20a?=
 =?UTF-8?q?pr=C3=A8s=20game=20over?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/main/java/engine/MenuPanel.java       | 104 +++++++++++++++---
 MAVENProject/src/main/java/jeu/Jeu.java       |  12 +-
 MAVENProject/src/main/java/start/Main.java    |  48 ++++----
 3 files changed, 125 insertions(+), 39 deletions(-)

diff --git a/MAVENProject/src/main/java/engine/MenuPanel.java b/MAVENProject/src/main/java/engine/MenuPanel.java
index f76ae5d..c58f073 100644
--- a/MAVENProject/src/main/java/engine/MenuPanel.java
+++ b/MAVENProject/src/main/java/engine/MenuPanel.java
@@ -8,20 +8,55 @@ import static engine.GraphicalInterface.f;
 public class MenuPanel {
 
     private static boolean lancementpartie = false;
+
+    public static boolean isRetourdebut() {
+        return retourdebut;
+    }
+
+    private static boolean retourdebut = true;
     private JButton button;
+    private JButton button1;
+    private JButton button2;
+    private JButton button3;
 
+    private static  boolean shootingCharacter = false;
+    private static  boolean normalCharacter = false;
 
+    public static boolean isShootingCharacter() {
+        return shootingCharacter;
+    }
 
-    public static void setLancementpartie(boolean lancementpartie) {
-        MenuPanel.lancementpartie = lancementpartie;
+    public static boolean isNormalCharacter() {
+        return normalCharacter;
+    }
+
+    private void resetLancementpartie() {
+        button.removeActionListener(e -> lancementpartie = true);
+        lancementpartie = false;
+    }
+
+    private void resetRetourdebut() {
+        button.removeActionListener(e -> retourdebut = true);
+        retourdebut = false;
+    }
+
+    private void resetCharacter() {
+        button1.removeActionListener(e -> shootingCharacter = true);
+        button2.removeActionListener(e -> normalCharacter = true);
+        shootingCharacter = false;
+        normalCharacter = false;
     }
 
     private Panel gameMenu;
+    private Panel gameChoice;
+    private Panel gameFin;
 
     public boolean isLancementpartie() {
         return lancementpartie;
     }
 
+
+
     public MenuPanel(){
         f=new JFrame();
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
@@ -29,31 +64,74 @@ public class MenuPanel {
         f.setPreferredSize(new Dimension(jeu.Painter.getWidth(), jeu.Painter.getHeight()));
 
     }
-    public void menudebut(){
+    public void menudebut() {
         gameMenu = new Panel();
         button = new JButton("Nouvelle partie");
-        gameMenu.add(button,BorderLayout.CENTER);
-
+        gameMenu.add(button, BorderLayout.CENTER);
+        button.addActionListener(e -> lancementpartie = true);
         f.getContentPane().add(gameMenu);
+        f.setContentPane(gameMenu);
+        f.pack();
+        f.setVisible(true);
+        f.getContentPane().setFocusable(true);
+        while(!isLancementpartie()){
+            try {
+                Thread.sleep(1);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        resetLancementpartie();
+        resetRetourdebut();
+        f.getContentPane().remove(gameMenu);
+    }
+
+    public void menuChoice(){
+        gameChoice = new Panel();
+        button1 = new JButton("Personnage Distance");
+        button2 = new JButton("Personnage Melee");
+        gameChoice.add(button1,BorderLayout.CENTER);
+        gameChoice.add(button2,BorderLayout.CENTER);
+        button1.addActionListener(e -> shootingCharacter = true);
+        button2.addActionListener(e -> normalCharacter = true);
+        f.getContentPane().add(gameChoice);
+        f.setContentPane(gameChoice);
         f.pack();
         f.setVisible(true);
         f.getContentPane().setFocusable(true);
+
+        while(!isShootingCharacter() && !isNormalCharacter()){
+            try {
+                Thread.sleep(1);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        f.getContentPane().remove(gameChoice);
     }
 
     public void menufin(){
-        gameMenu = new Panel(new FlowLayout(FlowLayout.CENTER));
+        resetCharacter();
+        gameFin= new Panel(new FlowLayout(FlowLayout.CENTER));
+        button3 = new JButton("Ecran debut");
         JLabel label = new JLabel("Game Over");
         label.setFont(new Font("Arial", Font.BOLD, 24));
         label.setForeground(Color.RED);
-        gameMenu.add(label);
-        f.getContentPane().add(gameMenu);
+        gameFin.add(label);
+        gameFin.add(button3,BorderLayout.CENTER);
+        button3.addActionListener(e -> retourdebut = true);
+        f.getContentPane().add(gameFin);
+        f.setContentPane(gameFin);
         f.pack();
         f.setVisible(true);
         f.getContentPane().setFocusable(true);
-    }
-
-
-    public void waitlancementpartie(){
-        button.addActionListener(e -> lancementpartie = true);
+        while(!isRetourdebut()){
+            try {
+                Thread.sleep(1);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        f.getContentPane().remove(gameFin);
     }
 }
diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java
index 11374b6..4bbf80c 100644
--- a/MAVENProject/src/main/java/jeu/Jeu.java
+++ b/MAVENProject/src/main/java/jeu/Jeu.java
@@ -138,8 +138,16 @@ public class Jeu implements Game{
         monsterList.add(new Bat(new Coordonnees(1500, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1, 3));
         monsterList.add(new Boss(new Coordonnees(3000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 500, 90, 180, 3, 50));*/
         //on charge le perso (a la fin du constructeur, cest important par rapport a obstacleTable, sinon y'a des pbs de "causalite")
-        gameCharacterLoader = new CharacterLoader(characterSkinPath,new ShootingCharacter(new Coordonnees(xdebut, zdebut), 1500, 1,600000));
-        gameCharacter = new ShootingCharacter(new Coordonnees(xdebut, zdebut), 1500, 1,600000);
+        //regarde le choix du personnage
+        if (engine.MenuPanel.isShootingCharacter()) {
+            gameCharacter = new ShootingCharacter(new Coordonnees(xdebut, zdebut), 1500, 1, 600000);
+            gameCharacterLoader = new CharacterLoader(characterSkinPath, gameCharacter);
+        }
+
+        if (engine.MenuPanel.isNormalCharacter()){
+            gameCharacter = new Character(new Coordonnees(xdebut, zdebut), 1500, 1, 600000);
+            gameCharacterLoader = new CharacterLoader(characterSkinPath, gameCharacter);
+        }
 
         //on genere la table des monstres
         monsterList= levelManager.generateMonsterTable();
diff --git a/MAVENProject/src/main/java/start/Main.java b/MAVENProject/src/main/java/start/Main.java
index a4bfe7b..50e8811 100644
--- a/MAVENProject/src/main/java/start/Main.java
+++ b/MAVENProject/src/main/java/start/Main.java
@@ -8,7 +8,6 @@ import engine.GameEngineGraphical;
 import jeu.Controller;
 import jeu.Jeu;
 
-import static engine.MenuPanel.setLancementpartie;
 
 /**
  * lancement du moteur avec le jeu
@@ -16,36 +15,37 @@ import static engine.MenuPanel.setLancementpartie;
 public class Main {
 
 	public static void main(String[] args) throws InterruptedException {
+		MenuPanel menu = new MenuPanel();
+		while(engine.MenuPanel.isRetourdebut()) {
 
-		// creation du jeu particulier et de son afficheur
-		Jeu game = new Jeu("helpFilePacman.txt");
-		Painter painter = new Painter();
-		Controller controller = new Controller();
+			menu.menudebut();
+			Thread.sleep(2);
+			menu.menuChoice();
 
-		GameEngineGraphical engine = new GameEngineGraphical(game, painter, controller);
+			// creation du jeu particulier et de son afficheur
+			Jeu game = new Jeu("helpFilePacman.txt");
+			Painter painter = new Painter();
+			Controller controller = new Controller();
 
-		//creation du menu
-		MenuPanel menu = new MenuPanel();
-		menu.menudebut();
-		while(!menu.isLancementpartie()){
-			menu.waitlancementpartie();
-		}
-		setLancementpartie(false);
-		
-		//pour la musique
-		
-		MP3 mp3 = new MP3("cyberPacMusic1bon.wav");
-		mp3.displayMusic();
+			GameEngineGraphical engine = new GameEngineGraphical(game, painter, controller);
 
-		// classe qui lance le moteur de jeu generique
 
-		engine.run();
-		mp3.stopMusic();
+			//pour la musique
+			MP3 mp3 = new MP3("cyberPacMusic1bon.wav");
+			mp3.displayMusic();
 
+			// classe qui lance le moteur de jeu generique
+			engine.run();
 
-		mp3 = new MP3("failsound.wav");
-		mp3.displayMusic();
-		menu.menufin();
+			//stop la musique du jeu
+			mp3.stopMusic();
+
+
+			mp3 = new MP3("failsound.wav");
+			mp3.displayMusic();
+			menu.menufin();
+			mp3.stopMusic();
+		}
 
 	}
 
-- 
GitLab