Gestion des morts
This commit is contained in:
parent
84d63bd9c6
commit
4718e00771
@ -12,7 +12,8 @@ public abstract class CarteCondition extends CarteEffet implements Serializable{
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 903022795821166067L;
|
||||
|
||||
private Condition condition;
|
||||
|
||||
public CarteCondition() {
|
||||
super("","");
|
||||
this.condition = new Condition();
|
||||
@ -21,12 +22,11 @@ public abstract class CarteCondition extends CarteEffet implements Serializable{
|
||||
|
||||
public CarteCondition(String nom, String description) {
|
||||
super(nom, description);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private Condition condition;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
@ -120,7 +120,7 @@ public class CreatingCardsTest {
|
||||
// Ténèbre
|
||||
|
||||
// Araignée Sanguinaire
|
||||
/*
|
||||
|
||||
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)))));
|
||||
|
||||
@ -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)),
|
||||
new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, 1, true)))));
|
||||
*/
|
||||
|
||||
// Dynamite
|
||||
|
||||
// 21
|
||||
|
||||
|
||||
// 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))));
|
||||
}
|
||||
/*
|
||||
|
||||
|
||||
DatabaseManager.queryInsertObject(22,new CarteEquipementStat(CartePiochable.Type.TENEBRE,
|
||||
new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_DAMAGE, 1, true))));
|
||||
|
||||
@ -171,7 +171,7 @@ public class CreatingCardsTest {
|
||||
));
|
||||
|
||||
// 29
|
||||
*/
|
||||
|
||||
DatabaseManager.queryInsertObject(30,new CartePiochable(CartePiochable.Type.TENEBRE,
|
||||
new EffetChoisirCible(new ActionVoler(ActionVoler.VOLER))));
|
||||
|
||||
|
@ -46,7 +46,7 @@ public class ActionAltererStatistiquesJoueur extends Action{
|
||||
{
|
||||
j2.addToStat(key, valeur);
|
||||
}else {
|
||||
j2.setStat(key, valeur);
|
||||
j2.updateStat(key, valeur);
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,6 +82,6 @@ public class ActionAltererStatistiquesJoueur extends Action{
|
||||
mot2 = " le ";
|
||||
}
|
||||
|
||||
return mot1+" "+valeur+" "+key+mot2+"joueur";
|
||||
return mot1+" "+Math.abs(valeur)+" "+key+mot2+"joueur";
|
||||
}
|
||||
}
|
||||
|
@ -396,19 +396,17 @@ public class PlateauController implements Initializable {
|
||||
final ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.langue", Locale.FRANCE);
|
||||
final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle);
|
||||
Pane root = (Pane)fxmlLoader.load();
|
||||
//CartePiochable lzj = fxmlLoader.getController();
|
||||
//lzj.setImageView(this.getImageCarte(j.getCarteLieu()));
|
||||
JoueurIHM jihm = getJoueurIHM(j);
|
||||
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 ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.langue", Locale.FRANCE);
|
||||
final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle);
|
||||
Pane root = (Pane)fxmlLoader.load();
|
||||
//CartePiochable lzj = fxmlLoader.getController();
|
||||
//lzj.setImageView(this.getImageCarte(j.getCarteLieu()));
|
||||
|
||||
JoueurIHM jihm = getJoueurIHM(j);
|
||||
jihm.setZoneJoueur(root);
|
||||
}
|
||||
@ -460,7 +458,7 @@ public void afficherEffet(Joueur j) throws IOException {
|
||||
|
||||
InputStream fileSound1 = getClass().getResourceAsStream("/ihm/ressources/musique/BEEP1.wav");
|
||||
EffetSonore.playSoundEffect(fileSound1);
|
||||
|
||||
|
||||
System.out.println("Jeu en pause ...");
|
||||
final URL fxmlURL = getClass().getResource("/ihm/ressources/Pause.fxml");
|
||||
final ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.langue", Locale.FRANCE);
|
||||
@ -542,17 +540,15 @@ public void afficherEffet(Joueur j) throws IOException {
|
||||
VBox v= (VBox)a.getChildren().get(0);
|
||||
AnchorPane b=(AnchorPane)s.getItems().get(1);
|
||||
ImageView i= (ImageView)b.getChildren().get(0);
|
||||
|
||||
|
||||
v.setRotate(180);
|
||||
i.setRotate(180);
|
||||
s.setRotate(180);
|
||||
}
|
||||
jihm.getZoneJoueur();
|
||||
jihm.setZoneJoueur(root);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public Map<String,BufferedImage> getMapRessourcesDosCartes() {
|
||||
return mapRessourcesDosCartes;
|
||||
}
|
||||
@ -565,13 +561,13 @@ public void afficherEffet(Joueur j) throws IOException {
|
||||
|
||||
public void afficherChoisirAction(Joueur joueur, List<Action> list) {
|
||||
|
||||
|
||||
List<Button> buttons = new ArrayList<Button>();
|
||||
|
||||
for(Action a : list) {
|
||||
Button button = interpret(a);
|
||||
buttons.add(button);
|
||||
button.setOnAction(x -> {
|
||||
|
||||
this.choixAction = a;
|
||||
GestionnaireJeu.notifyPlateau();
|
||||
});
|
||||
|
@ -9,6 +9,6 @@ public enum Contexte {
|
||||
ACTIVER_EFFET_LIEU,
|
||||
EFFET_BOB,
|
||||
LANCER_DES_4,
|
||||
LANCER_DES_6, CHOISIR_VISION, CHOISIR_ACTION
|
||||
LANCER_DES_6, CHOISIR_VISION, CHOISIR_ACTION, EFFET_CHARLES
|
||||
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ import carte.CartePiochable;
|
||||
import carte.CartePiochable.Type;
|
||||
import carte.CarteVision;
|
||||
import database.RessourceLoader;
|
||||
import effet.Effet;
|
||||
import effet.action.Action;
|
||||
import ihm.controller.PlateauController;
|
||||
import javafx.application.Platform;
|
||||
|
@ -33,6 +33,7 @@ public class Joueur {
|
||||
public static final String PLAYER_NB_EQUIPEMENTS = "nb_equipements";
|
||||
|
||||
private Map<String, Integer> stats;
|
||||
private boolean deathState;
|
||||
|
||||
|
||||
|
||||
@ -44,6 +45,7 @@ public class Joueur {
|
||||
this.nom = nom;
|
||||
this.revele = false;
|
||||
this.gestionnaireEquipements = new GestionnaireEquipements(this);
|
||||
this.deathState = false;
|
||||
|
||||
stats = new HashMap<>();
|
||||
|
||||
@ -65,15 +67,32 @@ public class Joueur {
|
||||
return this.cartePersonnage.getEquipe();
|
||||
}
|
||||
|
||||
private void changeStat(String key, int valeur) {
|
||||
this.stats.put(key, valeur);
|
||||
}
|
||||
public void setStat(String key, int valeur) {
|
||||
this.stats.put(key, valeur);
|
||||
}
|
||||
|
||||
public void updateStat(String key, int valeur) {
|
||||
setStat(key, valeur);
|
||||
if(isDeadStat()) {
|
||||
death();
|
||||
}
|
||||
updateVictoirePlateau();
|
||||
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
|
||||
public void setHP(int val) {
|
||||
this.stats.put("HP", val);
|
||||
@ -84,9 +103,9 @@ public class Joueur {
|
||||
this.stats.put("nb_equipements", val);
|
||||
}
|
||||
//pour tests IA
|
||||
public void setDamage(int val) {
|
||||
this.stats.put("DAMAGE", val);
|
||||
}
|
||||
public void setDamage(int val) {
|
||||
this.stats.put("DAMAGE", val);
|
||||
}
|
||||
|
||||
private void updateVie() {
|
||||
int damage = damageTaken();
|
||||
@ -99,9 +118,7 @@ public class Joueur {
|
||||
}
|
||||
|
||||
private void updateVictoirePlateau() {
|
||||
|
||||
int result = victoire() ? 0 : 1;
|
||||
this.plateau.setStat(Plateau.PARTIE_FINIE, result);
|
||||
this.plateau.victoire(this);
|
||||
}
|
||||
|
||||
public boolean victoire() {
|
||||
@ -161,7 +178,7 @@ public class Joueur {
|
||||
if(key.contentEquals(PLAYER_HP)) {
|
||||
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) {
|
||||
this.cartePersonnage = cp;
|
||||
this.changeStat(PLAYER_HP, cp.getPv());
|
||||
this.setStat(PLAYER_HP, cp.getPv());
|
||||
}
|
||||
|
||||
public void setPlateau(Plateau plateau2) {
|
||||
@ -279,4 +296,10 @@ public class Joueur {
|
||||
public Joueur choisir(List<Joueur> adjacents, Contexte attaquer) {
|
||||
return this.plateau.choisir(this,adjacents, attaquer);
|
||||
}
|
||||
|
||||
public Map<String, Integer> getStats() {
|
||||
return this.stats;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -14,7 +14,6 @@ import carte.CarteLieuMultiple;
|
||||
import carte.CarteLieuType;
|
||||
import carte.CartePiochable;
|
||||
import database.RessourceLoader;
|
||||
import effet.Effet;
|
||||
import effet.EffetChoisirCible;
|
||||
import effet.EffetChoisirEffet;
|
||||
import effet.EffetSelf;
|
||||
@ -23,6 +22,7 @@ import effet.action.ActionVoler;
|
||||
import ihm.controller.PlateauController;
|
||||
import personnage.Allie;
|
||||
import personnage.CartePersonnage;
|
||||
import personnage.CartePersonnage.Equipe;
|
||||
import personnage.Franklin;
|
||||
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_SHADOW = "nb_morts_shadow";
|
||||
public static final String PARTIE_FINIE = "partie_finie";
|
||||
public static final String WIN_CHARLES = "victoire_charles";
|
||||
|
||||
private Map<String, Integer> stats;
|
||||
|
||||
@ -262,53 +263,44 @@ public class Plateau extends Thread{
|
||||
int nbJoueurs = this.joueurs.size();
|
||||
int i = 0;
|
||||
|
||||
while(true) {
|
||||
while(!isPartieTerminee()) {
|
||||
|
||||
System.out.println(joueurs.size());
|
||||
Joueur currentJoueur = this.joueurs.get(i % nbJoueurs);
|
||||
System.out.println("\n\n\n\n\n");
|
||||
System.out.println("Au tour de "+currentJoueur.getNom());
|
||||
System.out.println("Lancement des dés.");
|
||||
deplacer(currentJoueur);
|
||||
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);
|
||||
Joueur currentJoueur = this.joueurs.get(i % nbJoueurs);
|
||||
|
||||
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();
|
||||
System.out.println("Vous passez a "+currentJoueur.getStat(Joueur.PLAYER_HP)+" pv");
|
||||
if(!currentJoueur.isDead()) {
|
||||
|
||||
deplacer(currentJoueur);
|
||||
if(isPartieTerminee()) break;
|
||||
}
|
||||
|
||||
System.out.println("\n");
|
||||
|
||||
System.out.println("Souhaitez vous attaquer quelqu'un ?");
|
||||
if(currentJoueur.choisir(Contexte.ATTAQUER)){
|
||||
if(currentJoueur.hasOpponents()) {
|
||||
List<Joueur> adjacents = currentJoueur.getJoueursRange();
|
||||
Joueur cible = (Joueur) currentJoueur.choisir(adjacents,Contexte.ATTAQUER);
|
||||
attaquer(currentJoueur,cible);
|
||||
gj.afficherLieu(currentJoueur);
|
||||
|
||||
if(currentJoueur.choisir(Contexte.ACTIVER_EFFET_LIEU)) {
|
||||
currentJoueur.utiliserEffetLieu();
|
||||
if(isPartieTerminee()) break;
|
||||
}else {
|
||||
System.out.println("Il n'y a personne a attaquer.");
|
||||
}
|
||||
|
||||
if(currentJoueur.choisir(Contexte.ATTAQUER)){
|
||||
if(currentJoueur.hasOpponents()) {
|
||||
List<Joueur> adjacents = currentJoueur.getJoueursRange();
|
||||
Joueur cible = (Joueur) currentJoueur.choisir(adjacents,Contexte.ATTAQUER);
|
||||
attaquer(currentJoueur,cible);
|
||||
if(isPartieTerminee()) break;
|
||||
}else {
|
||||
System.out.println("Il n'y a personne a attaquer.");
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
List<Joueur> gagnants = new ArrayList<Joueur>();
|
||||
|
||||
System.out.println(this.stats);
|
||||
for(Joueur j : joueurs) {
|
||||
if(j.victoire()) {
|
||||
gagnants.add(j);
|
||||
System.out.println("CartePersonnage "+j.getCartePersonnage()+" Stats "+j.getStats());
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Liste des gagnants
|
||||
// TODO Evaluate every winners
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isPartieTerminee() {
|
||||
@ -445,17 +437,31 @@ public class Plateau extends Thread{
|
||||
CarteLieu cl = joueur.getCarteLieu();
|
||||
|
||||
joueurs.addAll(cl.getJoueurs());
|
||||
joueurs.remove(joueur);
|
||||
joueurs.addAll(cl.getJoueursAdjacents());
|
||||
joueurs.remove(joueur);
|
||||
|
||||
removeDeads(joueurs);
|
||||
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) {
|
||||
List<Joueur> joueurs = new ArrayList<Joueur>();
|
||||
joueurs.addAll(this.getJoueurs());
|
||||
joueurs.remove(joueur);
|
||||
removeDeads(joueurs);
|
||||
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) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package personnage;
|
||||
|
||||
import carte.CarteCondition;
|
||||
import condition.Condition;
|
||||
import main.Joueur;
|
||||
|
||||
public abstract class CartePersonnage extends CarteCondition {
|
||||
@ -19,7 +20,6 @@ public abstract class CartePersonnage extends CarteCondition {
|
||||
super(nom, description);
|
||||
this.pv = pv;
|
||||
this.joueur = joueur;
|
||||
|
||||
}
|
||||
|
||||
public abstract void utiliser();
|
||||
|
@ -1,9 +1,12 @@
|
||||
package personnage;
|
||||
|
||||
import condition.Condition;
|
||||
import condition.ConditionStatistiques;
|
||||
import effet.Effet;
|
||||
import effet.EffetSelf;
|
||||
import effet.action.Action;
|
||||
import effet.action.ActionAltererStatistiquesJoueur;
|
||||
import main.Contexte;
|
||||
import main.Joueur;
|
||||
import main.Plateau;
|
||||
|
||||
@ -15,7 +18,10 @@ public class Charles extends CartePersonnage{
|
||||
Action action = new ActionAltererStatistiquesJoueur("HP",-2,true);
|
||||
Effet effet = new EffetSelf(action);
|
||||
this.setEffet(effet);
|
||||
|
||||
|
||||
Condition winCondition = new ConditionStatistiques(ConditionStatistiques.PLATEAU, Plateau.WIN_CHARLES, 1, ConditionStatistiques.EQUAL);
|
||||
this.setCondition(winCondition);
|
||||
|
||||
}
|
||||
|
||||
public Charles() {
|
||||
@ -24,6 +30,9 @@ public class Charles extends CartePersonnage{
|
||||
Action action = new ActionAltererStatistiquesJoueur("HP",-2,true);
|
||||
Effet effet = new EffetSelf(action);
|
||||
this.setEffet(effet);
|
||||
|
||||
Condition winCondition = new ConditionStatistiques(ConditionStatistiques.PLATEAU, Plateau.WIN_CHARLES, 1, ConditionStatistiques.EQUAL);
|
||||
this.setCondition(winCondition);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -32,20 +41,22 @@ public class Charles extends CartePersonnage{
|
||||
Joueur joueur = this.getJoueur();
|
||||
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();
|
||||
utiliser(joueur);
|
||||
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() {
|
||||
|
||||
/*
|
||||
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());
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
package personnage;
|
||||
|
||||
import condition.WinConditionHunter;
|
||||
|
Loading…
x
Reference in New Issue
Block a user