ajout notion de mort, les entites peuvent mourir, et ca ne plante pas

This commit is contained in:
Amaury Joly 2020-12-13 11:34:17 +01:00
parent 304a9c851a
commit 2435e0308c
5 changed files with 39 additions and 8 deletions

View File

@ -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())

View File

@ -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);

View File

@ -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);
}

View File

@ -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) {

View File

@ -24,6 +24,8 @@ public class IA extends Entite {
}**/
@Override
public boolean avancerDirectionChoisie(Direction d) {
if(estMort())
return false;
return jeu.deplacerEntite(this, jeu.getDistance(this,jeu.getHector()) > 3.0 ? d : jeu.getDirection(this,jeu.getHector()));
}