From 412b459b0d3c727e19ec1a9dbf3afbc831c1e6a4 Mon Sep 17 00:00:00 2001 From: rosier8u <basile.rosier6@etu.univ-lorraine> Date: Fri, 8 Dec 2023 14:59:11 +0100 Subject: [PATCH] =?UTF-8?q?Ajouter=20une=20classe=20de=20jeu=20(DP=20Facad?= =?UTF-8?q?e)=20avec=20une=20interface=20rudimentaire=20permettant=20de=20?= =?UTF-8?q?cr=C3=A9er=20une=20=C3=A9quipe,=20d=E2=80=99en=20supprimer=20un?= =?UTF-8?q?e,=20de=20produire=20des=20attaques,=20d=E2=80=99am=C3=A9liorer?= =?UTF-8?q?=20une=20=C3=A9quipe,=20etc.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConcreteStrategieAgressif.java | 2 + .../ConcreteStrategieDefensif.java | 2 + .../src/modele/DialogueTerminal.java | 227 ++++++++++++++++++ design_pattern/src/modele/Equipe.java | 12 + design_pattern/src/modele/Facade.java | 2 +- design_pattern/src/modele/Jeu.java | 65 ++++- design_pattern/src/modele/Personnage.java | 7 + 7 files changed, 308 insertions(+), 9 deletions(-) create mode 100644 design_pattern/src/modele/DialogueTerminal.java diff --git a/design_pattern/src/modele/DPStrategie/ConcreteStrategieAgressif.java b/design_pattern/src/modele/DPStrategie/ConcreteStrategieAgressif.java index 9914af3..d28b20f 100644 --- a/design_pattern/src/modele/DPStrategie/ConcreteStrategieAgressif.java +++ b/design_pattern/src/modele/DPStrategie/ConcreteStrategieAgressif.java @@ -1,11 +1,13 @@ package modele.DPStrategie; +import modele.DPState.EtatBlesse; import modele.Personnage; public class ConcreteStrategieAgressif implements Strategie { @Override public void attaquer(int degat, Personnage personnage) { personnage.subir(degat+5); + personnage.setEtat(new EtatBlesse(personnage)); } @Override diff --git a/design_pattern/src/modele/DPStrategie/ConcreteStrategieDefensif.java b/design_pattern/src/modele/DPStrategie/ConcreteStrategieDefensif.java index 33c4f3f..87e2121 100644 --- a/design_pattern/src/modele/DPStrategie/ConcreteStrategieDefensif.java +++ b/design_pattern/src/modele/DPStrategie/ConcreteStrategieDefensif.java @@ -1,5 +1,6 @@ package modele.DPStrategie; +import modele.DPState.EtatEndormi; import modele.Personnage; public class ConcreteStrategieDefensif implements Strategie { @@ -11,6 +12,7 @@ public class ConcreteStrategieDefensif implements Strategie { nouveauDegat = degat-5; } personnage.subir(degat-5); + personnage.setEtat(new EtatEndormi(personnage)); } @Override diff --git a/design_pattern/src/modele/DialogueTerminal.java b/design_pattern/src/modele/DialogueTerminal.java new file mode 100644 index 0000000..166add8 --- /dev/null +++ b/design_pattern/src/modele/DialogueTerminal.java @@ -0,0 +1,227 @@ +package modele; + +import modele.DPFabrique.*; +import modele.DPStrategie.ConcreteStrategieAgressif; +import modele.DPStrategie.ConcreteStrategieDefensif; +import modele.DPStrategie.ConcreteStrategieNeutre; +import modele.Jeu; + +import java.util.ArrayList; +import java.util.Scanner; + +public class DialogueTerminal { + private Jeu jeu; + private int finDePartie; + + public DialogueTerminal(Jeu jeu){ + this.jeu = jeu; + this.finDePartie = 0; + } + public void debutPartie(){ + Scanner scan = new Scanner(System.in); + System.out.println("Bienvenue dans le jeu"); + setConfig(scan); + + while (jeu.getEquipe() == null){ + System.out.println("Vous devez créer une équipe de maximum : "+ + Configuration.getInstance().getTailleMaxEquipe()+" personnage"); + creerEquipe(scan); + + System.out.println("Votre équipe a été créé.\nVoulez-vous la supprimer Pour en recréer une ?\n0 : non\n1 : oui"); + int supprimer = Integer.parseInt(scan.nextLine()); + if (supprimer == 1){ + jeu.supprimerEquipe(); + } + } + afficherEquipe(); + creerEnnemis(); + + while (finDePartie == 0){ + jouer(scan); + } + } + + public void jouer(Scanner scan){ + System.out.println("\nQue voulez-vous faire ? :"); + System.out.println("0 : Produire une attaque\n1 : Améliorer une équipe\n"); + int action = Integer.parseInt(scan.nextLine()); + switch (action){ + case 0: + attaquer(scan); + annonceFinDeTour(); + break; + case 1: + jeu.ameliorerEquipe(jeu.getEquipe()); + System.out.println("Le niveau de votre équipe a été augmenté."); + break; + } + } + + private void creerEquipe(Scanner scan){ + System.out.println("Choisissez un nom pour votre équipe :"); + jeu.creerEquipe(scan.nextLine()); + + System.out.println("Choisissez un personnage à ajouter à l'équipe :"); + System.out.println("1 : Guerrier\n2 : Roi\n3 : Guerisseur\n4 : Sorcier\n"); + int choix = Integer.parseInt(scan.nextLine()); + ajouterPersonnage(choix); + + int tailleActuelle = 1; + while (choix != 0 && tailleActuelle < Configuration.getInstance().getTailleMaxEquipe()){ + System.out.println("Vous pouvez encore ajouter maximum : "+ + (Configuration.getInstance().getTailleMaxEquipe()-tailleActuelle)+" personneges."); + System.out.println("Choisissez un personnage à ajouter à l'équipe :"); + System.out.println("0 : Terminé\n1 : Guerrier\n2 : Roi\n3 : Guerisseur\n4 : Sorcier\n"); + choix = Integer.parseInt(scan.nextLine()); + if (choix != 0){ + ajouterPersonnage(choix); + tailleActuelle++; + } + } + } + + private void setConfig(Scanner scan){ + System.out.println("Vous devez définir la configuration du jeu"); + System.out.println("Choisissez un niveau de difficulté de 1 à 5"); + int difficulte = Integer.parseInt(scan.nextLine()); + while ((difficulte < 1) || (difficulte > 5)){ + System.out.println("Choisissez un niveau de difficulté de 1 à 5"); + difficulte = Integer.parseInt(scan.nextLine()); + } + Configuration.getInstance().setDifficulte(difficulte); + + System.out.println("Choisissez la taille maximum d'une équipe de 1 à 5"); + int tailleEquipe = Integer.parseInt(scan.nextLine()); + while (tailleEquipe < 1 || tailleEquipe > 5){ + System.out.println("Choisissez la taille maximum d'une équipe de 1 à 5"); + tailleEquipe = Integer.parseInt(scan.nextLine()); + } + Configuration.getInstance().setTailleMaxEquipe(tailleEquipe); + } + + private void ajouterPersonnage(int choix){ + switch (choix){ + case 1: + jeu.setConstructeur(new ConstructeurGuerrier()); + jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage()); + break; + case 2: + jeu.setConstructeur(new ConstructeurRoi()); + jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage()); + break; + case 3: + jeu.setConstructeur(new ConstructeurGuerisseur()); + jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage()); + break; + case 4: + jeu.setConstructeur(new ConstructeurSorcier()); + jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage()); + break; + } + } + + private void afficherEquipe(){ + System.out.println("Voici votre équipe :"); + for (Personnage p : jeu.getEquipe().getEquipe()){ + System.out.println(p.toString()); + } + } + + private void creerEnnemis(){ + jeu.setConstructeur(new ConstructeurGuerrier()); + for (int i = 0; i < Configuration.getInstance().getTailleMaxEquipe(); i++){ + jeu.getEquipeEnnemi().ajouter(jeu.getConstructeur().creerPersonnage()); + } + } + + private void attaquer(Scanner scan) { + choixStrategie(scan); + jeu.produireAttaque(jeu.getEquipe()); + } + + private void choixStrategie(Scanner scan){ + int strat = -1; + while (strat < 0 || strat > 2) { + System.out.println("Votre personnage : " + jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()) + " va attaquer" + + "le personnage ennemi : " + jeu.getEquipeEnnemi().getPersonnage(jeu.getNbAttaqueEquipe())); + System.out.println("Choisissez votre stratégie pour ce tour :\n0: Neutre\n1: Agressif\n2: Défensif"); + strat = Integer.parseInt(scan.nextLine()); + } + switch (strat) { + case 0: + jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()).setStrategie(new ConcreteStrategieNeutre()); + break; + case 1: + jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()).setStrategie(new ConcreteStrategieAgressif()); + break; + case 2: + jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()).setStrategie(new ConcreteStrategieDefensif()); + break; + } + } + + private void annonceFinDeTour(){ + int nbMort = 0; + ArrayList<Personnage> listeDesMorts = new ArrayList<>(); + System.out.println("Dans votre équipe :"); + for (Personnage p : jeu.getEquipe().getEquipe()){ + if (p.getPointsDeVie() <= 0){ + System.out.printf("Le personnage "+p.toString()+" est mort.\n"); + listeDesMorts.add(p); + + nbMort ++; + } + } + for (Personnage p : listeDesMorts){ + jeu.personnageMort(p); + if (jeu.tailleEquipe() == 0){ + finDePartie = 1; + System.out.println("Toute votre équipe est morte\nVous avez PERDU."); + break; + } + } + if (nbMort == 0){ + System.out.println("Il n'y a eu aucun mort."); + } + annonceEtat(); + + nbMort = 0; + listeDesMorts = new ArrayList<>(); + System.out.println("Dans l'équipe adverse :"); + for (Personnage p : jeu.getEquipeEnnemi().getEquipe()){ + if (p.getPointsDeVie() <= 0){ + System.out.printf("Le personnage "+p.getNom()+" est mort.\n"); + listeDesMorts.add(p); + nbMort ++; + } + } + for (Personnage p : listeDesMorts){ + jeu.ennemiMort(p); + if (jeu.tailleEquipeEnnemi() == 0){ + finDePartie = 1; + System.out.println("Toute l'équipe ennemi est morte\nVous avez GAGNÉ."); + break; + } + } + if (nbMort == 0){ + System.out.println("Il n'y a eu aucun mort."); + } + annonceEtatEnnemi(); + } + + private void annonceEtat(){ + for (Personnage p : jeu.getEquipe().getEquipe()){ + if (p.getEtat() != null){ + System.out.println(p.toString()+" a l'état : "+p.getEtat()); + } + } + } + private void annonceEtatEnnemi(){ + for (Personnage p : jeu.getEquipeEnnemi().getEquipe()){ + if (p.getEtat() != null){ + System.out.println(p.toString()+" a l'état : "+p.getEtat()); + } + } + } + +} diff --git a/design_pattern/src/modele/Equipe.java b/design_pattern/src/modele/Equipe.java index 2e6b63a..b17337a 100644 --- a/design_pattern/src/modele/Equipe.java +++ b/design_pattern/src/modele/Equipe.java @@ -23,14 +23,26 @@ public class Equipe implements Groupe{ return equipe; } + public Personnage getPersonnage(int i){ + return equipe.get(i); + } + public void ajouter(Personnage personnage){ this.equipe.add(personnage); } + public void supprimer(Personnage personnage){ + this.equipe.remove(personnage); + } + public void ajouter(Equipe equipe){ this.equipe.addAll(equipe.getEquipe()); } + public int getTaille(){ + return equipe.size(); + } + public void accepter(VisiteurGroupe visiteur) { visiteur.visiter(this); } diff --git a/design_pattern/src/modele/Facade.java b/design_pattern/src/modele/Facade.java index 6d44914..e1aeb44 100644 --- a/design_pattern/src/modele/Facade.java +++ b/design_pattern/src/modele/Facade.java @@ -2,7 +2,7 @@ package modele; public interface Facade { void creerEquipe(String nomEquipe); - void supprimerEquipe(String nomEquipe); + void supprimerEquipe(); void produireAttaque(Equipe equipe); void ameliorerEquipe(Equipe equipe); } diff --git a/design_pattern/src/modele/Jeu.java b/design_pattern/src/modele/Jeu.java index 06aca4b..9035d09 100644 --- a/design_pattern/src/modele/Jeu.java +++ b/design_pattern/src/modele/Jeu.java @@ -1,26 +1,75 @@ package modele; +import modele.DPFabrique.Constructeur; +import modele.DPVisiteur.NiveauVisiteur; +import modele.DPVisiteur.VisiteurGroupe; + public class Jeu implements Facade { - private Equipe equipe1; - private Equipe equipe2; + private Equipe equipe; + private Equipe equipeEnnemi; + private int nbAttaqueEquipe; + private Constructeur constructeur; + private VisiteurGroupe visiteurGroupe; + @Override public void creerEquipe(String nomEquipe) { - equipe1 = new Equipe(nomEquipe); - equipe2 = new Equipe("Ennemi"); + equipe = new Equipe(nomEquipe); + nbAttaqueEquipe = 0; + equipeEnnemi = new Equipe("Ennemi"); + visiteurGroupe = new NiveauVisiteur(); } @Override - public void supprimerEquipe(String nomEquipe) { - + public void supprimerEquipe() { + equipe = null; } @Override public void produireAttaque(Equipe equipe) { - + equipe.getPersonnage(nbAttaqueEquipe).attaquer(getEquipeEnnemi().getPersonnage(getEquipeEnnemi().getTaille()-1)); + if (nbAttaqueEquipe == (Configuration.getInstance().getTailleMaxEquipe() - 1)){ + nbAttaqueEquipe = 0; + }else { + nbAttaqueEquipe++; + } } @Override public void ameliorerEquipe(Equipe equipe) { - equipe.augmenterNiveau(1); + visiteurGroupe.visiter(equipe); + } + + public Equipe getEquipe() { + return equipe; + } + + public Equipe getEquipeEnnemi() { + return equipeEnnemi; + } + + public Constructeur getConstructeur() { + return constructeur; + } + + public void setConstructeur(Constructeur constructeur) { + this.constructeur = constructeur; + } + + public int getNbAttaqueEquipe() { + return nbAttaqueEquipe; + } + + public void personnageMort(Personnage personnage){ + this.equipe.supprimer(personnage); + } + public void ennemiMort(Personnage personnage){ + this.equipeEnnemi.supprimer(personnage); + } + + public int tailleEquipe(){ + return this.equipe.getTaille(); + } + public int tailleEquipeEnnemi(){ + return this.equipeEnnemi.getTaille(); } } diff --git a/design_pattern/src/modele/Personnage.java b/design_pattern/src/modele/Personnage.java index 3c07cd8..b7b1c95 100644 --- a/design_pattern/src/modele/Personnage.java +++ b/design_pattern/src/modele/Personnage.java @@ -1,6 +1,7 @@ package modele; import modele.DPState.Etat; +import modele.DPStrategie.ConcreteStrategieNeutre; import modele.DPStrategie.Strategie; import modele.DPVisiteur.VisiteurGroupe; @@ -17,6 +18,7 @@ public abstract class Personnage implements Groupe{ this.niveau = niveau; this.nom = nom; this.arme = arme; + this.strategie = new ConcreteStrategieNeutre(); } public void augmenterNiveau(int augmentation){ @@ -67,4 +69,9 @@ public abstract class Personnage implements Groupe{ public Etat getEtat() { return etat; } + + @Override + public String toString() { + return nom + " ("+pointsDeVie+" PV / niveau "+niveau+")"; + } } -- GitLab