Gestion des morts

This commit is contained in:
Paul Gross 2020-05-14 12:36:15 +02:00
parent 84d63bd9c6
commit 4718e00771
11 changed files with 151 additions and 80 deletions

View File

@ -12,6 +12,7 @@ public abstract class CarteCondition extends CarteEffet implements Serializable{
* *
*/ */
private static final long serialVersionUID = 903022795821166067L; private static final long serialVersionUID = 903022795821166067L;
private Condition condition;
public CarteCondition() { public CarteCondition() {
super("",""); super("","");
@ -21,12 +22,11 @@ public abstract class CarteCondition extends CarteEffet implements Serializable{
public CarteCondition(String nom, String description) { public CarteCondition(String nom, String description) {
super(nom, description); super(nom, description);
} }
private Condition condition;
/* /*

View File

@ -120,7 +120,7 @@ public class CreatingCardsTest {
// Ténèbre // Ténèbre
// Araignée Sanguinaire // Araignée Sanguinaire
/*
DatabaseManager.queryInsertObject(17, new CartePiochable(CartePiochable.Type.TENEBRE,new EffetMultiple(new EffetChoisirCible(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -2, true)), DatabaseManager.queryInsertObject(17, new CartePiochable(CartePiochable.Type.TENEBRE,new EffetMultiple(new EffetChoisirCible(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -2, true)),
new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -2, true))))); new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -2, true)))));
@ -135,18 +135,18 @@ public class CreatingCardsTest {
DatabaseManager.queryInsertObject(20, new CartePiochable(CartePiochable.Type.TENEBRE,new EffetMultiple(new EffetChoisirCible(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -2, true)), DatabaseManager.queryInsertObject(20, new CartePiochable(CartePiochable.Type.TENEBRE,new EffetMultiple(new EffetChoisirCible(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -2, true)),
new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, 1, true))))); new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, 1, true)))));
*/
// Dynamite // Dynamite
// 21 // 21
// Hache tueuse // Hache tueuse
for(int i = 0; i <= 2; i++) {
DatabaseManager.queryInsertObject(22+i,new CarteEquipementStat(CartePiochable.Type.TENEBRE, DatabaseManager.queryInsertObject(22,new CarteEquipementStat(CartePiochable.Type.TENEBRE,
new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_DAMAGE, 1, true)))); new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_DAMAGE, 1, true))));
}
/*
DatabaseManager.queryInsertObject(22,new CarteEquipementStat(CartePiochable.Type.TENEBRE, DatabaseManager.queryInsertObject(22,new CarteEquipementStat(CartePiochable.Type.TENEBRE,
new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_DAMAGE, 1, true)))); new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_DAMAGE, 1, true))));
@ -171,7 +171,7 @@ public class CreatingCardsTest {
)); ));
// 29 // 29
*/
DatabaseManager.queryInsertObject(30,new CartePiochable(CartePiochable.Type.TENEBRE, DatabaseManager.queryInsertObject(30,new CartePiochable(CartePiochable.Type.TENEBRE,
new EffetChoisirCible(new ActionVoler(ActionVoler.VOLER)))); new EffetChoisirCible(new ActionVoler(ActionVoler.VOLER))));

View File

@ -46,7 +46,7 @@ public class ActionAltererStatistiquesJoueur extends Action{
{ {
j2.addToStat(key, valeur); j2.addToStat(key, valeur);
}else { }else {
j2.setStat(key, valeur); j2.updateStat(key, valeur);
} }
} }
@ -82,6 +82,6 @@ public class ActionAltererStatistiquesJoueur extends Action{
mot2 = " le "; mot2 = " le ";
} }
return mot1+" "+valeur+" "+key+mot2+"joueur"; return mot1+" "+Math.abs(valeur)+" "+key+mot2+"joueur";
} }
} }

View File

@ -396,19 +396,17 @@ public class PlateauController implements Initializable {
final ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.langue", Locale.FRANCE); final ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.langue", Locale.FRANCE);
final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle); final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle);
Pane root = (Pane)fxmlLoader.load(); Pane root = (Pane)fxmlLoader.load();
//CartePiochable lzj = fxmlLoader.getController();
//lzj.setImageView(this.getImageCarte(j.getCarteLieu()));
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root); jihm.setZoneJoueur(root);
} }
public void afficherEffet(Joueur j) throws IOException { public void afficherEffet(Joueur j) throws IOException {
final URL fxmlURL = getClass().getResource("/ihm/ressources/Jouer_tour(2b)piocher_carte.fxml"); final URL fxmlURL = getClass().getResource("/ihm/ressources/Jouer_tour(2b)piocher_carte.fxml");
final ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.langue", Locale.FRANCE); final ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.langue", Locale.FRANCE);
final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle); final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle);
Pane root = (Pane)fxmlLoader.load(); Pane root = (Pane)fxmlLoader.load();
//CartePiochable lzj = fxmlLoader.getController();
//lzj.setImageView(this.getImageCarte(j.getCarteLieu()));
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root); jihm.setZoneJoueur(root);
} }
@ -549,10 +547,8 @@ public void afficherEffet(Joueur j) throws IOException {
} }
jihm.getZoneJoueur(); jihm.getZoneJoueur();
jihm.setZoneJoueur(root); jihm.setZoneJoueur(root);
} }
public Map<String,BufferedImage> getMapRessourcesDosCartes() { public Map<String,BufferedImage> getMapRessourcesDosCartes() {
return mapRessourcesDosCartes; return mapRessourcesDosCartes;
} }
@ -565,13 +561,13 @@ public void afficherEffet(Joueur j) throws IOException {
public void afficherChoisirAction(Joueur joueur, List<Action> list) { public void afficherChoisirAction(Joueur joueur, List<Action> list) {
List<Button> buttons = new ArrayList<Button>(); List<Button> buttons = new ArrayList<Button>();
for(Action a : list) { for(Action a : list) {
Button button = interpret(a); Button button = interpret(a);
buttons.add(button); buttons.add(button);
button.setOnAction(x -> { button.setOnAction(x -> {
this.choixAction = a; this.choixAction = a;
GestionnaireJeu.notifyPlateau(); GestionnaireJeu.notifyPlateau();
}); });

View File

@ -9,6 +9,6 @@ public enum Contexte {
ACTIVER_EFFET_LIEU, ACTIVER_EFFET_LIEU,
EFFET_BOB, EFFET_BOB,
LANCER_DES_4, LANCER_DES_4,
LANCER_DES_6, CHOISIR_VISION, CHOISIR_ACTION LANCER_DES_6, CHOISIR_VISION, CHOISIR_ACTION, EFFET_CHARLES
} }

View File

@ -15,7 +15,6 @@ import carte.CartePiochable;
import carte.CartePiochable.Type; import carte.CartePiochable.Type;
import carte.CarteVision; import carte.CarteVision;
import database.RessourceLoader; import database.RessourceLoader;
import effet.Effet;
import effet.action.Action; import effet.action.Action;
import ihm.controller.PlateauController; import ihm.controller.PlateauController;
import javafx.application.Platform; import javafx.application.Platform;

View File

@ -33,6 +33,7 @@ public class Joueur {
public static final String PLAYER_NB_EQUIPEMENTS = "nb_equipements"; public static final String PLAYER_NB_EQUIPEMENTS = "nb_equipements";
private Map<String, Integer> stats; private Map<String, Integer> stats;
private boolean deathState;
@ -44,6 +45,7 @@ public class Joueur {
this.nom = nom; this.nom = nom;
this.revele = false; this.revele = false;
this.gestionnaireEquipements = new GestionnaireEquipements(this); this.gestionnaireEquipements = new GestionnaireEquipements(this);
this.deathState = false;
stats = new HashMap<>(); stats = new HashMap<>();
@ -65,15 +67,32 @@ public class Joueur {
return this.cartePersonnage.getEquipe(); return this.cartePersonnage.getEquipe();
} }
private void changeStat(String key, int valeur) {
this.stats.put(key, valeur);
}
public void setStat(String key, int valeur) { public void setStat(String key, int valeur) {
this.stats.put(key, valeur); this.stats.put(key, valeur);
}
public void updateStat(String key, int valeur) {
setStat(key, valeur);
if(isDeadStat()) {
death();
}
updateVictoirePlateau(); updateVictoirePlateau();
updateVie(); updateVie();
} }
public boolean isDeadStat() {
return this.stats.get(PLAYER_HP) <= 0;
}
public boolean isDead() {
return this.deathState;
}
private void death() {
this.deathState = true;
this.plateau.death(this);
}
//pour tests IA //pour tests IA
public void setHP(int val) { public void setHP(int val) {
this.stats.put("HP", val); this.stats.put("HP", val);
@ -99,9 +118,7 @@ public class Joueur {
} }
private void updateVictoirePlateau() { private void updateVictoirePlateau() {
this.plateau.victoire(this);
int result = victoire() ? 0 : 1;
this.plateau.setStat(Plateau.PARTIE_FINIE, result);
} }
public boolean victoire() { public boolean victoire() {
@ -161,7 +178,7 @@ public class Joueur {
if(key.contentEquals(PLAYER_HP)) { if(key.contentEquals(PLAYER_HP)) {
this.plateau.alerationVie(this,valeur); this.plateau.alerationVie(this,valeur);
} }
this.setStat(key,valeurBase+valeur); this.updateStat(key,valeurBase+valeur);
} }
@ -179,7 +196,7 @@ public class Joueur {
public void setCartePersonnage(CartePersonnage cp) { public void setCartePersonnage(CartePersonnage cp) {
this.cartePersonnage = cp; this.cartePersonnage = cp;
this.changeStat(PLAYER_HP, cp.getPv()); this.setStat(PLAYER_HP, cp.getPv());
} }
public void setPlateau(Plateau plateau2) { public void setPlateau(Plateau plateau2) {
@ -279,4 +296,10 @@ public class Joueur {
public Joueur choisir(List<Joueur> adjacents, Contexte attaquer) { public Joueur choisir(List<Joueur> adjacents, Contexte attaquer) {
return this.plateau.choisir(this,adjacents, attaquer); return this.plateau.choisir(this,adjacents, attaquer);
} }
public Map<String, Integer> getStats() {
return this.stats;
}
} }

View File

@ -14,7 +14,6 @@ import carte.CarteLieuMultiple;
import carte.CarteLieuType; import carte.CarteLieuType;
import carte.CartePiochable; import carte.CartePiochable;
import database.RessourceLoader; import database.RessourceLoader;
import effet.Effet;
import effet.EffetChoisirCible; import effet.EffetChoisirCible;
import effet.EffetChoisirEffet; import effet.EffetChoisirEffet;
import effet.EffetSelf; import effet.EffetSelf;
@ -23,6 +22,7 @@ import effet.action.ActionVoler;
import ihm.controller.PlateauController; import ihm.controller.PlateauController;
import personnage.Allie; import personnage.Allie;
import personnage.CartePersonnage; import personnage.CartePersonnage;
import personnage.CartePersonnage.Equipe;
import personnage.Franklin; import personnage.Franklin;
import personnage.Vampire; import personnage.Vampire;
@ -40,6 +40,7 @@ public class Plateau extends Thread{
public static final String NB_MORTS_HUNTER = "nb_morts_hunter"; public static final String NB_MORTS_HUNTER = "nb_morts_hunter";
public static final String NB_MORTS_SHADOW = "nb_morts_shadow"; public static final String NB_MORTS_SHADOW = "nb_morts_shadow";
public static final String PARTIE_FINIE = "partie_finie"; public static final String PARTIE_FINIE = "partie_finie";
public static final String WIN_CHARLES = "victoire_charles";
private Map<String, Integer> stats; private Map<String, Integer> stats;
@ -262,30 +263,21 @@ public class Plateau extends Thread{
int nbJoueurs = this.joueurs.size(); int nbJoueurs = this.joueurs.size();
int i = 0; int i = 0;
while(true) { while(!isPartieTerminee()) {
System.out.println(joueurs.size());
Joueur currentJoueur = this.joueurs.get(i % nbJoueurs); Joueur currentJoueur = this.joueurs.get(i % nbJoueurs);
System.out.println("\n\n\n\n\n");
System.out.println("Au tour de "+currentJoueur.getNom()); if(!currentJoueur.isDead()) {
System.out.println("Lancement des dés.");
deplacer(currentJoueur); deplacer(currentJoueur);
if(isPartieTerminee()) break; if(isPartieTerminee()) break;
System.out.println("Vous êtes désormais sur le lieu "+currentJoueur.getCarteLieu().getNom());
System.out.println("Voulez vous activer l'effet du lieu ?");
gj.afficherLieu(currentJoueur); gj.afficherLieu(currentJoueur);
if(currentJoueur.choisir(Contexte.ACTIVER_EFFET_LIEU)) { if(currentJoueur.choisir(Contexte.ACTIVER_EFFET_LIEU)) {
System.out.println("Vous activez l'effet du lieu.");
System.out.println("Vous avez "+currentJoueur.getStat(Joueur.PLAYER_HP)+" pv");
currentJoueur.utiliserEffetLieu(); currentJoueur.utiliserEffetLieu();
System.out.println("Vous passez a "+currentJoueur.getStat(Joueur.PLAYER_HP)+" pv");
if(isPartieTerminee()) break; if(isPartieTerminee()) break;
} }
System.out.println("\n");
System.out.println("Souhaitez vous attaquer quelqu'un ?");
if(currentJoueur.choisir(Contexte.ATTAQUER)){ if(currentJoueur.choisir(Contexte.ATTAQUER)){
if(currentJoueur.hasOpponents()) { if(currentJoueur.hasOpponents()) {
List<Joueur> adjacents = currentJoueur.getJoueursRange(); List<Joueur> adjacents = currentJoueur.getJoueursRange();
@ -298,17 +290,17 @@ public class Plateau extends Thread{
} }
i++; i++;
} }
}
List<Joueur> gagnants = new ArrayList<Joueur>(); List<Joueur> gagnants = new ArrayList<Joueur>();
System.out.println(this.stats);
for(Joueur j : joueurs) { for(Joueur j : joueurs) {
if(j.victoire()) { if(j.victoire()) {
gagnants.add(j); gagnants.add(j);
System.out.println("CartePersonnage "+j.getCartePersonnage()+" Stats "+j.getStats());
} }
} }
// TODO Liste des gagnants
// TODO Evaluate every winners
} }
public boolean isPartieTerminee() { public boolean isPartieTerminee() {
@ -445,17 +437,31 @@ public class Plateau extends Thread{
CarteLieu cl = joueur.getCarteLieu(); CarteLieu cl = joueur.getCarteLieu();
joueurs.addAll(cl.getJoueurs()); joueurs.addAll(cl.getJoueurs());
joueurs.remove(joueur);
joueurs.addAll(cl.getJoueursAdjacents()); joueurs.addAll(cl.getJoueursAdjacents());
joueurs.remove(joueur);
removeDeads(joueurs);
return (Joueur) gj.choisir(joueur, joueurs, Joueur.class); return (Joueur) gj.choisir(joueur, joueurs, Joueur.class);
} }
private void removeDeads(List<Joueur> joueurs) {
List<Joueur> toRemove = new ArrayList<Joueur>();
for(Joueur j : joueurs) {
if(j.isDead()) {
toRemove.add(j);
}
}
joueurs.removeAll(toRemove);
}
public Joueur choisirParmisTous(Joueur joueur) { public Joueur choisirParmisTous(Joueur joueur) {
List<Joueur> joueurs = new ArrayList<Joueur>(); List<Joueur> joueurs = new ArrayList<Joueur>();
joueurs.addAll(this.getJoueurs()); joueurs.addAll(this.getJoueurs());
joueurs.remove(joueur); joueurs.remove(joueur);
removeDeads(joueurs);
return (Joueur) gj.choisir(joueur, joueurs, Joueur.class); return (Joueur) gj.choisir(joueur, joueurs, Joueur.class);
} }
@ -485,4 +491,39 @@ public class Plateau extends Thread{
public Joueur choisir(Joueur joueur, List<Joueur> adjacents, Contexte attaquer) { public Joueur choisir(Joueur joueur, List<Joueur> adjacents, Contexte attaquer) {
return gj.choisirJoueur(joueur, adjacents, attaquer); return gj.choisirJoueur(joueur, adjacents, attaquer);
} }
public void death(Joueur joueur) {
Equipe ej = joueur.getEquipe();
switch(ej) {
case SHADOW:
this.updateStat(NB_MORTS_SHADOW,1,true);
break;
case HUNTER:
this.updateStat(NB_MORTS_HUNTER,1,true);
break;
case NEUTRE:
this.updateStat(NB_MORTS_NEUTRAL,1,true);
break;}
this.updateStat(NB_MORTS,1,true);
}
private void updateStat(String key , int value, boolean ajouter) {
if(ajouter) {
int valeurBase = this.getStat(key);
this.setStat(key, valeurBase+value);
}else {
this.setStat(key, value);
}
}
public void victoire(Joueur joueur) {
if(joueur.victoire()) {
this.updateStat(PARTIE_FINIE, 1, false);
}
}
} }

View File

@ -1,6 +1,7 @@
package personnage; package personnage;
import carte.CarteCondition; import carte.CarteCondition;
import condition.Condition;
import main.Joueur; import main.Joueur;
public abstract class CartePersonnage extends CarteCondition { public abstract class CartePersonnage extends CarteCondition {
@ -19,7 +20,6 @@ public abstract class CartePersonnage extends CarteCondition {
super(nom, description); super(nom, description);
this.pv = pv; this.pv = pv;
this.joueur = joueur; this.joueur = joueur;
} }
public abstract void utiliser(); public abstract void utiliser();

View File

@ -1,9 +1,12 @@
package personnage; package personnage;
import condition.Condition;
import condition.ConditionStatistiques;
import effet.Effet; import effet.Effet;
import effet.EffetSelf; import effet.EffetSelf;
import effet.action.Action; import effet.action.Action;
import effet.action.ActionAltererStatistiquesJoueur; import effet.action.ActionAltererStatistiquesJoueur;
import main.Contexte;
import main.Joueur; import main.Joueur;
import main.Plateau; import main.Plateau;
@ -16,6 +19,9 @@ public class Charles extends CartePersonnage{
Effet effet = new EffetSelf(action); Effet effet = new EffetSelf(action);
this.setEffet(effet); this.setEffet(effet);
Condition winCondition = new ConditionStatistiques(ConditionStatistiques.PLATEAU, Plateau.WIN_CHARLES, 1, ConditionStatistiques.EQUAL);
this.setCondition(winCondition);
} }
public Charles() { public Charles() {
@ -24,6 +30,9 @@ public class Charles extends CartePersonnage{
Action action = new ActionAltererStatistiquesJoueur("HP",-2,true); Action action = new ActionAltererStatistiquesJoueur("HP",-2,true);
Effet effet = new EffetSelf(action); Effet effet = new EffetSelf(action);
this.setEffet(effet); this.setEffet(effet);
Condition winCondition = new ConditionStatistiques(ConditionStatistiques.PLATEAU, Plateau.WIN_CHARLES, 1, ConditionStatistiques.EQUAL);
this.setCondition(winCondition);
} }
@Override @Override
@ -32,20 +41,22 @@ public class Charles extends CartePersonnage{
Joueur joueur = this.getJoueur(); Joueur joueur = this.getJoueur();
super.attaquer(j, blessure); super.attaquer(j, blessure);
if(joueur.getStat(Joueur.PLAYER_HP) > 2 && joueur.getRevele()){ if(joueur.getStat(Joueur.PLAYER_HP) > 2 && joueur.getRevele()
&& joueur.choisir(Contexte.EFFET_CHARLES)){
Plateau p = j.getPlateau(); Plateau p = j.getPlateau();
utiliser(joueur); utiliser(joueur);
p.attaquer(this.getJoueur(), j); p.attaquer(this.getJoueur(), j);
} }
Plateau p = j.getPlateau();
if(j.isDead() && (p.getStat(Plateau.NB_MORTS) >= 3)) {
p.setStat(Plateau.WIN_CHARLES, 1);
}
} }
@Override
public void utiliser() { public void utiliser() {
/*
System.out.println("vie avant : " + this.getJoueur().getCartePersonnage().getPv());
this.getJoueur().setStat("HP", this.getJoueur().getStat("HP") - 2);
System.out.println("vie apres : " + this.getJoueur().getCartePersonnage().getPv());
*/
} }
} }

View File

@ -1,3 +1,4 @@
package personnage; package personnage;
import condition.WinConditionHunter; import condition.WinConditionHunter;