From 2435e0308cf24c7265fcf35a239f04bb871e3087 Mon Sep 17 00:00:00 2001 From: Amaury Joly Date: Sun, 13 Dec 2020 11:34:17 +0100 Subject: [PATCH] ajout notion de mort, les entites peuvent mourir, et ca ne plante pas --- src/modele/calculs/Gravite.java | 2 +- src/modele/calculs/IA.java | 3 +-- src/modele/calculs/Jeu.java | 24 +++++++++++++++++++++--- src/modele/donnees/Entite.java | 12 ++++++++++++ src/modele/donnees/IA.java | 6 ++++-- 5 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/modele/calculs/Gravite.java b/src/modele/calculs/Gravite.java index d7539d1..021d928 100644 --- a/src/modele/calculs/Gravite.java +++ b/src/modele/calculs/Gravite.java @@ -8,7 +8,7 @@ public class Gravite extends RealisateurDeDeplacement { boolean ret = false; for (ElementDynamique e : lstEntitesDynamiques) { - if(e instanceof Entite) { + if(e instanceof Entite && !((Entite) e).estMort()) { ElementPhysique eBas = ((Entite) e).regarderDansLaDirection(Direction.bas); ElementFond eFond = ((Entite) e).regarderDerriereSoit(); if (!(eFond != null && eFond.peutPermettreDeMonterDescendre()) diff --git a/src/modele/calculs/IA.java b/src/modele/calculs/IA.java index 8f55a72..bc64300 100644 --- a/src/modele/calculs/IA.java +++ b/src/modele/calculs/IA.java @@ -7,13 +7,12 @@ public class IA extends RealisateurDeDeplacement { protected boolean realiserDeplacement() { boolean ret = false; for (ElementDynamique e : lstEntitesDynamiques) - if (e instanceof modele.donnees.IA) { + if (e instanceof modele.donnees.IA && !((modele.donnees.IA) e).estMort()) { modele.donnees.IA ia = (modele.donnees.IA) e; ia.regarderDansLaDirection(Direction.droite); if (ia.alt < 2) { ia.alt++; } else { - if(ia.avancerDirectionChoisie(ia.d) == false){ ia.d = Direction.inversDir(ia.d); ia.avancerDirectionChoisie(ia.d); diff --git a/src/modele/calculs/Jeu.java b/src/modele/calculs/Jeu.java index cbe4f72..ed7c014 100644 --- a/src/modele/calculs/Jeu.java +++ b/src/modele/calculs/Jeu.java @@ -157,8 +157,8 @@ public class Jeu { if (retour) { deplacerEntite(pCourant, pCible, ent); } - } else if((d == Direction.haut || d == Direction.bas) && objetALaPosition(pCible) instanceof Decor) { - killPlayer(ent); + } else if((d == Direction.haut || d == Direction.bas) && objetALaPosition(pCible) instanceof Decor && ((Entite) e).peutEtreEcrase()) { + killEntite(ent, pCourant); } } else if (e instanceof modele.donnees.Items) { retour = true; @@ -168,6 +168,17 @@ public class Jeu { return retour; } + private void killEntite(Entite e, Point pCourant) { + grilleEntites[pCourant.x][pCourant.y][1] = null; + map.put(e, null); + + e.tuer(); + + if (e instanceof Heros) + killPlayer(e); + + } + // TODO private void killPlayer(Entite e) { System.out.println("Techniquement le joueur est mort"); } @@ -226,7 +237,7 @@ public class Jeu { private void retirerItem(Point pCourant, modele.donnees.Items elt) { grilleEntites[pCourant.x][pCourant.y][1] = null; - map.put((ElementDynamique) elt, new Point(-1, -1)); + map.put(elt, null); } /** Indique si p est contenu dans la grille @@ -266,6 +277,9 @@ public class Jeu { Point orig = map.get(sujet); Point dest = map.get(cible); + if(orig == null || dest == null) + return Direction.gauche; + if(orig.getX() - dest.getX() > 0) return Direction.gauche; else @@ -276,6 +290,10 @@ public class Jeu { public double getDistance(ElementDynamique sujet, ElementDynamique cible) { Point orig = map.get(sujet); Point dest = map.get(cible); + + if(orig == null || dest == null) + return 0; + return orig.distance(dest); } diff --git a/src/modele/donnees/Entite.java b/src/modele/donnees/Entite.java index d75e99a..e4de785 100644 --- a/src/modele/donnees/Entite.java +++ b/src/modele/donnees/Entite.java @@ -9,11 +9,23 @@ import modele.calculs.Direction; import modele.calculs.Jeu; public abstract class Entite extends ElementPhysique implements ElementDynamique { + + boolean mort = false; + public Entite(Jeu jeu) { super(jeu); } + public void tuer() { + mort = true; + } + public boolean estMort() { + return mort; + } + public boolean avancerDirectionChoisie(Direction d) { + if(estMort()) + return false; return jeu.deplacerEntite(this, d); } public ElementPhysique regarderDansLaDirection(Direction d) { diff --git a/src/modele/donnees/IA.java b/src/modele/donnees/IA.java index e741e82..6432e9a 100644 --- a/src/modele/donnees/IA.java +++ b/src/modele/donnees/IA.java @@ -24,8 +24,10 @@ public class IA extends Entite { }**/ @Override public boolean avancerDirectionChoisie(Direction d) { - return jeu.deplacerEntite(this, jeu.getDistance(this,jeu.getHector()) > 3.0 ? d : jeu.getDirection(this,jeu.getHector())); - } + if(estMort()) + return false; + return jeu.deplacerEntite(this, jeu.getDistance(this,jeu.getHector()) > 3.0 ? d : jeu.getDirection(this,jeu.getHector())); + } @Override public boolean peutEtreEcrase() {