diff --git a/src/ihm/controller/GestionnaireDePions.java b/src/ihm/controller/GestionnaireDePions.java index 6d954c6..e624358 100644 --- a/src/ihm/controller/GestionnaireDePions.java +++ b/src/ihm/controller/GestionnaireDePions.java @@ -1,9 +1,12 @@ package ihm.controller; +import carte.CarteLieu; import javafx.scene.layout.FlowPane; import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; +import main.Joueur; public class GestionnaireDePions { @@ -11,10 +14,12 @@ public class GestionnaireDePions { private Pion pionLieu; private GridPane gridPaneVie; + private GridPane gridPaneLieux; - public GestionnaireDePions(Color color,GridPane gridPaneVie) { + public GestionnaireDePions(Color color,GridPane gridPaneVie,GridPane gridPaneLieux) { this.gridPaneVie = gridPaneVie; + this.gridPaneLieux = gridPaneLieux; this.pionVie = new Pion(color); this.pionLieu = new Pion(color); } @@ -33,7 +38,28 @@ public class GestionnaireDePions { fpNew.getChildren().add(pionVie); } - public void deplacerPionLieux() { + public void deplacerPionLieux(Joueur j) { + + CarteLieu cl = j.getCarteLieu(); + int indexCL = j.getPlateau().getLieux().indexOf(cl); + HBox hbox; + System.out.println("GridPaneLieux "+this.gridPaneLieux); + if(indexCL < 2) { + hbox = (HBox) this.gridPaneLieux.getChildren().get(0); + + }else if(indexCL < 4) { + hbox = (HBox) this.gridPaneLieux.getChildren().get(1); + + }else { + hbox = (HBox) this.gridPaneLieux.getChildren().get(2); + + } + + StackPane sp = (StackPane) hbox.getChildren().get(indexCL%2); + FlowPane fp = (FlowPane) sp.getChildren().get(0); + fp.getChildren().add(this.pionLieu); } + + } diff --git a/src/ihm/controller/JoueurIHM.java b/src/ihm/controller/JoueurIHM.java index 656414f..96de409 100644 --- a/src/ihm/controller/JoueurIHM.java +++ b/src/ihm/controller/JoueurIHM.java @@ -22,13 +22,13 @@ public class JoueurIHM { private GestionnaireDePions gestionnaireDePions; private Color color; - public JoueurIHM(int i, Joueur joueur, Pane zoneJoueur, Color color, GridPane gridPaneVie) { + public JoueurIHM(int i, Joueur joueur, Pane zoneJoueur, Color color, GridPane gridPaneVie, GridPane gridPaneLieux) { this.setPosition(i); this.setJoueur(joueur); this.zoneJoueur = zoneJoueur; this.color = color; - this.gestionnaireDePions = new GestionnaireDePions(this.color,gridPaneVie); + this.gestionnaireDePions = new GestionnaireDePions(this.color,gridPaneVie, gridPaneLieux); zoneJoueur.setBorder(new Border(new BorderStroke(color, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(5)))); @@ -115,6 +115,10 @@ public class JoueurIHM { public void deplacerPionVie(int damage) { this.gestionnaireDePions.deplacerPionVie(damage); } + + public void replacerPionLieu() { + this.gestionnaireDePions.deplacerPionLieux(this.joueur); + } public void choisir() { diff --git a/src/ihm/controller/PlateauController.java b/src/ihm/controller/PlateauController.java index 1e879c4..b5f340f 100644 --- a/src/ihm/controller/PlateauController.java +++ b/src/ihm/controller/PlateauController.java @@ -34,7 +34,7 @@ public class PlateauController implements Initializable { @FXML private AnchorPane rootPane; @FXML private GridPane gridPaneVie; - //@FXML static public GridPane gridPaneLieux; + @FXML public GridPane gridPaneLieux; private ChoisirBoolean cb; @@ -62,7 +62,7 @@ public class PlateauController implements Initializable { for(int i : map.keySet()) { System.out.println(i); - joueursIHM.add(new JoueurIHM(i,map.get(i),getPaneJoueur(i),new Color(Math.random(), Math.random(), Math.random(),1),gridPaneVie)); + joueursIHM.add(new JoueurIHM(i,map.get(i),getPaneJoueur(i),new Color(Math.random(), Math.random(), Math.random(),1),gridPaneVie, gridPaneLieux)); } for(int i = 0; i - + diff --git a/src/main/GestionnaireJeu.java b/src/main/GestionnaireJeu.java index 8616232..577480c 100644 --- a/src/main/GestionnaireJeu.java +++ b/src/main/GestionnaireJeu.java @@ -63,8 +63,14 @@ public class GestionnaireJeu { return joueurs.get(0); } + public void deplacer(Joueur currentJoueur) { + + Platform.runLater(() -> { + pc.deplacer(currentJoueur); + }); + } + public boolean choisir(Joueur joueur) { - Platform.runLater(() -> { try { @@ -90,14 +96,10 @@ public class GestionnaireJeu { try { return query.get().booleanValue(); } catch (InterruptedException | ExecutionException e) { - // TODO Auto-generated catch block + e.printStackTrace(); } - Platform.runLater(() -> { - - }); - return false; } @@ -155,5 +157,12 @@ public class GestionnaireJeu { } + public void updateVieJoueur(Joueur joueur, int damage) { + pc.updateVieJoueur(joueur, damage); + + } + + + } diff --git a/src/main/Joueur.java b/src/main/Joueur.java index e4b0391..319ea72 100644 --- a/src/main/Joueur.java +++ b/src/main/Joueur.java @@ -65,11 +65,31 @@ public class Joueur { } public void setStat(String key, int valeur) { - - // TODO Il faut créer des observers de mort this.stats.put(key, valeur); + updateVictoirePlateau(); + updateVie(); } + private void updateVie() { + int damage = damageTaken(); + this.plateau.updateVieJoueur(this, damage); + + } + + public int damageTaken() { + return this.cartePersonnage.getPv() - this.getStat(PLAYER_HP); + } + + private void updateVictoirePlateau() { + + int result = victoire() ? 0 : 1; + this.plateau.setStat(Plateau.PARTIE_FINIE, result); + } + + public boolean victoire() { + return this.cartePersonnage.victoire(); + } + public int getStat(String key) { if(stats.containsKey(key)) { @@ -80,7 +100,6 @@ public class Joueur { } } - public List getJoueursAdjacents() { List joueurs = this.carteLieu.getJoueursAdjacents(); @@ -98,7 +117,6 @@ public class Joueur { this.gestionnaireEquipements.ajouter(equipement); } public Equipement choisir(List equipements) { - // TODO Auto-generated method stub return null; } diff --git a/src/main/Plateau.java b/src/main/Plateau.java index 61f7080..b57b9d7 100644 --- a/src/main/Plateau.java +++ b/src/main/Plateau.java @@ -124,7 +124,6 @@ public class Plateau extends Thread{ public void initCartePersonnage(List cps) throws Exception { - int nbJoueurs = this.joueurs.size(); List lcp = new ArrayList<>(nbJoueurs); @@ -202,6 +201,7 @@ public class Plateau extends Thread{ 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 ?"); if(currentJoueur.choisir()) { @@ -209,6 +209,7 @@ public class Plateau extends Thread{ 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(isPartieTerminee()) break; } try { Thread.sleep(2000); @@ -223,6 +224,7 @@ public class Plateau extends Thread{ if(currentJoueur.hasOpponents()) { Joueur cible = currentJoueur.choisirAdjacents(); attaquer(currentJoueur,cible); + if(isPartieTerminee()) break; }else { System.out.println("Il n'y a personne a attaquer."); } @@ -237,8 +239,24 @@ public class Plateau extends Thread{ i++; } + + List gagnants = new ArrayList(); + + for(Joueur j : joueurs) { + if(j.victoire()) { + gagnants.add(j); + } + } + + // TODO Liste des gagnants + // TODO Evaluate every winners } + public boolean isPartieTerminee() { + return this.getStat(PARTIE_FINIE) == 1; + } + + public void deplacer(Joueur currentJoueur) { boolean attributed = false; @@ -255,6 +273,8 @@ public class Plateau extends Thread{ } } } + + gj.deplacer(currentJoueur); } public void attaquer(Joueur joueur1, Joueur joueur2) { @@ -279,7 +299,6 @@ public class Plateau extends Thread{ int roll4 =rollRandom(4); int roll6 = rollRandom(6); - gj.rollDice(j, PlateauController.DICE_BOTH, roll4,roll6); return Math.abs(roll4-roll6); } @@ -325,8 +344,7 @@ public class Plateau extends Thread{ }else { return -1; - } - + } } public void shuffleLieux(){ @@ -352,6 +370,11 @@ public class Plateau extends Thread{ this.lieux = lieux; shuffleLieux(); } + + public List getLieux() { + return this.lieux; + } + public boolean choisir(Joueur joueur) { return gj.choisir(joueur); @@ -377,4 +400,10 @@ public class Plateau extends Thread{ List joueurs = this.getJoueurs(); return gj.choisirParmisTous(joueur,joueurs); } + + + public void updateVieJoueur(Joueur joueur, int damage) { + gj.updateVieJoueur(joueur,damage); + + } }