Merge branch 'development' of https://github.com/PTE-SH/ShadowHunterGame into development

This commit is contained in:
nawfe 2020-05-14 11:14:23 +02:00
commit 22b5c8cf56
37 changed files with 819 additions and 336 deletions

View File

@ -3,7 +3,6 @@ package carte;
import java.awt.Point; import java.awt.Point;
import java.util.List; import java.util.List;
import carte.CartePiochable.Type;
import main.Joueur; import main.Joueur;
import main.Pioche; import main.Pioche;
@ -27,7 +26,7 @@ public class CarteLieuMultiple extends CarteLieu{
Pioche p = (Pioche) j.choisir(pioches, Pioche.class); Pioche p = (Pioche) j.choisir(pioches, Pioche.class);
System.out.println(pioches+ " "+p); System.out.println(pioches+ " "+p);
System.out.println(p.getStack()); System.out.println(p.getStack());
Carte c = p.piocher(); Carte c = p.piocher(j);
c.utiliser(j); c.utiliser(j);
} }

View File

@ -32,7 +32,7 @@ public class CarteLieuType extends CarteLieu{
*/ */
public void utiliser(Joueur j) { public void utiliser(Joueur j) {
System.out.println(pioche); System.out.println(pioche);
CartePiochable carte = pioche.piocher(); CartePiochable carte = pioche.piocher(j);
carte.utiliser(j); carte.utiliser(j);
} }

View File

@ -41,10 +41,9 @@ public class CartePiochable extends CarteCondition implements Serializable{
/* /*
* @param j Appel la méthode utiliser de effet sur le joueur j * @param j Appel la méthode utiliser de effet sur le joueur j
*/ */
@Override
public void utiliser(Joueur j) { public void utiliser(Joueur j) {
GestionnaireJeu gj = GestionnaireJeu.getGestionnaireJeu(); GestionnaireJeu gj = GestionnaireJeu.getGestionnaireJeu();
gj.piocher(j,this);
System.out.println("CartePiochable "+this + " Condition : "+this.getCondition()+" Effet : "+this.getEffet()+" Action : "+this.getEffet().getAction()); System.out.println("CartePiochable "+this + " Condition : "+this.getCondition()+" Effet : "+this.getEffet()+" Action : "+this.getEffet().getAction());
super.utiliser(j); super.utiliser(j);
} }

View File

@ -5,6 +5,7 @@ import java.io.Serializable;
import condition.Condition; import condition.Condition;
import effet.EffetChoisirCible; import effet.EffetChoisirCible;
import effet.action.Action; import effet.action.Action;
import main.Contexte;
import main.GestionnaireJeu; import main.GestionnaireJeu;
import main.Joueur; import main.Joueur;
@ -31,10 +32,13 @@ public class CarteVision extends CartePiochable implements Serializable{
gj.piocher(j1,this); gj.piocher(j1,this);
Joueur j2 = j1.choisiParmisTous(); Joueur j2 = j1.choisiParmisTous();
boolean M = j2.isMetamorph();
boolean Co = this.getCondition().isTrue(j2);
gj.recevoirCarteVision(j2,this);
boolean C = j2.choisir(Contexte.CHOISIR_VISION);
if(this.getCondition().isTrue(j2)) { if((!(M) && Co) || (M && C)) {
this.getEffet().getAction().affecte(j1, j2); this.getEffet().getAction().affecte(j1, j2);
} }
} }
} }

View File

@ -48,6 +48,11 @@ public class CreatingCardsTest {
//Ange gardien //Ange gardien
try { try {
for(int i = 0; i < 67; i++) {
DatabaseManager.queryInsertObject(i, null);
}
DatabaseManager.queryInsertObject(2,new CartePiochable(CartePiochable.Type.LUMIERE, DatabaseManager.queryInsertObject(2,new CartePiochable(CartePiochable.Type.LUMIERE,
new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_IMMUNITY, 1, true)))); new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_IMMUNITY, 1, true))));
@ -115,28 +120,33 @@ 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 EffetCiblerTous(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)))));
// Chauve - souris vampire // Chauve - souris vampire
DatabaseManager.queryInsertObject(18, new CartePiochable(CartePiochable.Type.TENEBRE,new EffetMultiple(new EffetCiblerTous(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -2, true)), DatabaseManager.queryInsertObject(18, 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)))));
DatabaseManager.queryInsertObject(19, new CartePiochable(CartePiochable.Type.TENEBRE,new EffetMultiple(new EffetCiblerTous(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -2, true)), DatabaseManager.queryInsertObject(19, 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)))));
DatabaseManager.queryInsertObject(20, new CartePiochable(CartePiochable.Type.TENEBRE,new EffetMultiple(new EffetCiblerTous(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,
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))));
@ -161,17 +171,18 @@ 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))));
DatabaseManager.queryInsertObject(31,new CartePiochable(CartePiochable.Type.TENEBRE, DatabaseManager.queryInsertObject(31,new CartePiochable(CartePiochable.Type.TENEBRE,
new EffetChoisirCible(new ActionVoler(ActionVoler.VOLER)))); new EffetChoisirCible(new ActionVoler(ActionVoler.VOLER))));
/*
DatabaseManager.queryInsertObject(32,new CarteEquipementStat(CartePiochable.Type.TENEBRE, DatabaseManager.queryInsertObject(32,new CarteEquipementStat(CartePiochable.Type.TENEBRE,
new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_DAMAGE, 1, true)))); new EffetSelf(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_DAMAGE, 1, true))));
*/
// Vision clairvoyante // Vision clairvoyante
DatabaseManager.queryInsertObject(33, new CarteVision(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -1, true), DatabaseManager.queryInsertObject(33, new CarteVision(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP, -1, true),
new ConditionStatistiques(ConditionStatistiques.JOUEUR, Joueur.PLAYER_HP, 11, ConditionStatistiques.LESS))); new ConditionStatistiques(ConditionStatistiques.JOUEUR, Joueur.PLAYER_HP, 11, ConditionStatistiques.LESS)));
@ -258,10 +269,8 @@ public class CreatingCardsTest {
// 64 // 64
CarteLieu lieu3 = new CarteLieu(new Point(-1,9)); CarteLieu lieu3 = new CarteLieu(new Point(-1,9));
lieu3.setEffet(new EffetChoisirEffet(new EffetChoisirCible(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP,-2,true)), lieu3.setEffet(new EffetChoisirCible(new ActionMultipleChoisir(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP,-2,true),
new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP,1,true))));
new EffetChoisirCible(new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP,1,true))));
DatabaseManager.queryInsertObject(64,lieu3); DatabaseManager.queryInsertObject(64,lieu3);
// 65 // 65

View File

@ -19,15 +19,20 @@ public class DatabaseManager {
private final static String url = "jdbc:postgresql://localhost:5432/ShadowHunterDatabase"; private final static String url = "jdbc:postgresql://localhost:5432/ShadowHunterDatabase";
private final static String user = "shManager"; private final static String user = "shManager";
private final static String password = "shadowhunter1234"; private final static String password = "shadowhunter1234";
private static Connection connection;
public static Connection connect() throws SQLException { public static void connect() throws SQLException {
return DriverManager.getConnection(url, user, password); if(connection == null || connection.isClosed()) {
connection = DriverManager.getConnection(url, user, password);
}
} }
public static List<Record> remplirTable(String query) { public static List<Record> remplirTable(String query) {
List<Record> list = new ArrayList<Record>(); List<Record> list = new ArrayList<Record>();
try (Connection connection = connect()) {
try{
connect();
//System.out.println("Connected to PostgreSQL database!"); //System.out.println("Connected to PostgreSQL database!");
Statement statement = connection.createStatement(); Statement statement = connection.createStatement();
//System.out.println("Reading records..."); //System.out.println("Reading records...");
@ -44,8 +49,8 @@ public class DatabaseManager {
public static List<Record> remplirTableSansImage(String query) { public static List<Record> remplirTableSansImage(String query) {
List<Record> list = new ArrayList<Record>(); List<Record> list = new ArrayList<Record>();
try (Connection connection = connect()) { try {
connect();
//System.out.println("Connected to PostgreSQL database!"); //System.out.println("Connected to PostgreSQL database!");
Statement statement = connection.createStatement(); Statement statement = connection.createStatement();
//System.out.println("Reading records..."); //System.out.println("Reading records...");
@ -93,8 +98,8 @@ public class DatabaseManager {
query = "UPDATE " + table + " SET objet = ? " query = "UPDATE " + table + " SET objet = ? "
+ " WHERE id = ? " ; + " WHERE id = ? " ;
Connection conn = connect(); connect();
PreparedStatement pst = conn.prepareStatement(query); PreparedStatement pst = connection.prepareStatement(query);
pst.setBinaryStream(1, objectIS); pst.setBinaryStream(1, objectIS);
pst.setInt(2, id); pst.setInt(2, id);
pst.executeUpdate(); pst.executeUpdate();

View File

@ -58,8 +58,10 @@ public class RessourceLoader {
Record r = t.getList().get(i); Record r = t.getList().get(i);
byte[] obj = r.getObjet(); byte[] obj = r.getObjet();
if(obj != null) {
Object o = deserialize(obj); Object o = deserialize(obj);
if(o != null && o != null) {
Carte c = (Carte)o; Carte c = (Carte)o;
c.setNom(r.getNom()); c.setNom(r.getNom());
cartes.put(i+1, c); cartes.put(i+1, c);

View File

@ -58,8 +58,30 @@ public class ActionAltererStatistiquesJoueur extends Action{
this.valeur = valeur; this.valeur = valeur;
} }
public String getKey() {
return this.key;
}
@Override @Override
public String toString(){ public String toString(){
return this.key+" "+this.valeur+" "+this.ajouter;
String mot1 = "";
String mot2 = "";
if(this.ajouter) {
if(valeur < 0) {
mot1 = "Retirer";
}else {
mot1 = "Ajouter";
}
mot2 = " au ";
}else {
mot1 = "Placer à";
mot2 = " le ";
}
return mot1+" "+valeur+" "+key+mot2+"joueur";
} }
} }

View File

@ -33,4 +33,9 @@ public class ActionAltererStatistiquesJoueurRoll extends ActionAltererStatistiqu
super.affecte(j1, j2); super.affecte(j1, j2);
} }
@Override
public String toString(){
return "Lancer un dé "+valeurRoll+" pour modifier les "+this.getKey()+" du joueur";
}
} }

View File

@ -19,4 +19,9 @@ public class ActionAttaquer extends Action {
} }
@Override
public String toString() {
return "Attaquer un joueur";
}
} }

View File

@ -14,4 +14,8 @@ public class ActionReveal extends Action {
j2.reveal(); j2.reveal();
} }
@Override
public String toString() {
return "Se réveler";
}
} }

View File

@ -3,6 +3,7 @@ package effet.action;
import java.util.List; import java.util.List;
import carte.CarteEquipement; import carte.CarteEquipement;
import javafx.scene.control.Label;
import main.Joueur; import main.Joueur;
public class ActionVoler extends Action{ public class ActionVoler extends Action{
@ -32,20 +33,29 @@ public class ActionVoler extends Action{
@Override @Override
public void affecte(Joueur j1, Joueur j2) { public void affecte(Joueur j1, Joueur j2) {
if(this.choix) {
List<CarteEquipement> equipements = j2.getEquipements(); List<CarteEquipement> equipements = j2.getEquipements();
if(!equipements.isEmpty()) {
CarteEquipement equipement = null;
if(this.choix) {
// J1 choisit quel équipement voler // J1 choisit quel équipement voler
CarteEquipement equipement = (CarteEquipement) j1.choisir(equipements, CarteEquipement.class); equipement = (CarteEquipement) j1.choisir(equipements, CarteEquipement.class);
j1.voler(j2,equipement);
}else { }else {
List<CarteEquipement> equipements = j2.getEquipements();
// J1 choisit quel équipement voler // J1 choisit quel équipement voler
CarteEquipement equipement = (CarteEquipement) j2.choisir(equipements,CarteEquipement.class); equipement = (CarteEquipement) j2.choisir(equipements,CarteEquipement.class);
}
j1.voler(j2,equipement); j1.voler(j2,equipement);
}
} }
@Override
public String toString() {
return "Voler un autre joueur";
} }
} }

View File

@ -3,10 +3,17 @@ package ihm;
public class Couple { public class Couple {
private String nom; private String nom;
private boolean ia; // true -> joueur virtuel private boolean ia; // true -> joueur virtuel
private int lvlIa;
public Couple (String nom, boolean ia) { public Couple (String nom) {
this.nom = nom; this.nom = nom;
this.ia = ia; this.ia = false;
}
public Couple (String nom, int niveau) {
this.nom = nom;
this.lvlIa = niveau;
this.ia = true;
} }
public String getNom() { public String getNom() {
@ -17,6 +24,7 @@ public class Couple {
this.nom = nom; this.nom = nom;
} }
public boolean isIa() { public boolean isIa() {
return ia; return ia;
} }
@ -25,4 +33,14 @@ public class Couple {
this.ia = ia; this.ia = ia;
} }
public int getLvlIa() {
return lvlIa;
}
public void setLvlIa(int lvlIa) {
this.lvlIa = lvlIa;
}
} }

View File

@ -1,6 +1,8 @@
package ihm; package ihm;
import carte.CarteEquipement; import carte.CarteEquipement;
import ihm.controller.PlateauController;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
public class ImageViewEquipement extends ImageView{ public class ImageViewEquipement extends ImageView{
@ -9,6 +11,8 @@ public class ImageViewEquipement extends ImageView{
public ImageViewEquipement(CarteEquipement ce) { public ImageViewEquipement(CarteEquipement ce) {
this.ce = ce; this.ce = ce;
Image im = PlateauController.getImageCarte(ce);
this.setImage(im);
} }
public CarteEquipement getCp() { public CarteEquipement getCp() {

View File

@ -1,7 +1,4 @@
package ihm; package ihm;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.net.URL; import java.net.URL;
import java.util.Locale; import java.util.Locale;
import java.util.ResourceBundle; import java.util.ResourceBundle;
@ -49,7 +46,6 @@ public class Main extends Application {
RessourceLoader rl = new RessourceLoader(); RessourceLoader rl = new RessourceLoader();
rl.loadRessources(); rl.loadRessources();
gj.setRessourceLoader(rl); gj.setRessourceLoader(rl);
launch(args); launch(args);
} }
} }

View File

@ -1,20 +1,32 @@
package ihm.controller; package ihm.controller;
import java.net.URL; import java.net.URL;
import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.util.Duration;
import main.Contexte;
import main.ControleurIA;
import main.GestionnaireJeu; import main.GestionnaireJeu;
import main.Joueur;
import main.JoueurVirtuel;
public class ChoisirBoolean implements Initializable { public class ChoisirBoolean implements Initializable {
@FXML private Button ouiButton; @FXML
@FXML private Button nonButton; private Button ouiButton;
@FXML private Label titre; @FXML
private Button nonButton;
@FXML
private Label titre;
private boolean result; private boolean result;
@Override @Override
public void initialize(URL arg0, ResourceBundle arg1) { public void initialize(URL arg0, ResourceBundle arg1) {
@ -54,7 +66,67 @@ public class ChoisirBoolean implements Initializable {
return titre; return titre;
} }
public void setTitre(Label titre) { public void setTitre(Contexte c) {
this.titre = titre; switch(c) {
case ATTAQUER:
titre.setText("Souhaitez-vous attaquer quelqu'un?");
break;
case ACTIVER_EFFET_LIEU :
titre.setText("Souhaitez-vous activer l'effet du lieu?");
break;
case CHOISIR_VISION :
titre.setText("Souhaitez-vous activer l'effet de la carte vision");
break;
default:
}
}
public void fireBtnIAEffetLieu() {
ControleurIA cIA = new ControleurIA();
ouiButton.setDisable(true);
nonButton.setDisable(true);
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(2000), ae -> {
if (cIA.choixUtiliserPouvoirLieu()) {
ouiButton.setDisable(false);
ouiButton.fire();
} else {
nonButton.setDisable(false);
nonButton.fire();
}
}));
timeline.play();
}
public void fireBtnIAVision() {
ControleurIA cIA = new ControleurIA();
ouiButton.setDisable(true);
nonButton.setDisable(true);
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(2000), ae -> {
if (cIA.mentirIAMetamorphe()) {
ouiButton.setDisable(false);
ouiButton.fire();
} else {
nonButton.setDisable(false);
nonButton.fire();
}
}));
timeline.play();
}
public void fireBtnIAattaquer(JoueurVirtuel jIA, List<Joueur> joueursLieu) {
ControleurIA cIA = new ControleurIA();
ouiButton.setDisable(true);
nonButton.setDisable(true);
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(2000), ae -> {
if (cIA.choixSiAttaquer(jIA, joueursLieu)) {
ouiButton.setDisable(false);
ouiButton.fire();
} else {
nonButton.setDisable(false);
nonButton.fire();
}
}));
timeline.play();
} }
} }

View File

@ -10,27 +10,18 @@ import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import main.GestionnaireJeu;
public class ChoisirEquipement implements Initializable{ public class ChoisirEquipement implements Initializable{
@FXML private GridPane grilleEquipement; @FXML private GridPane grilleEquipement;
@FXML private HBox hbox;
private List<CarteEquipement> equipements = new ArrayList<CarteEquipement>(); private List<CarteEquipement> equipements = new ArrayList<CarteEquipement>();
private CarteEquipement equipementSelected; private CarteEquipement equipementSelected;
@Override @Override
public void initialize(URL arg0, ResourceBundle arg1) { public void initialize(URL arg0, ResourceBundle arg1) {
for (int i=0; i<equipements.size(); i++) {
ImageView carte = (ImageView) grilleEquipement.getChildren().get(i);
/*InputStream input = getClass().getResourceAsStream("/ihm/ressources/img/" + "nomcarte" + ".png");
Image image = new Image(input);
carte.setImage(image);*/
int numEquipement = i;
carte.setOnMouseClicked(e -> {
equipementSelected = equipements.get(numEquipement);
});
}
} }
public List<CarteEquipement> getEquipements() { public List<CarteEquipement> getEquipements() {
@ -61,4 +52,23 @@ public class ChoisirEquipement implements Initializable{
return equipementSelected; return equipementSelected;
} }
public void setListCarteEquipements(List<CarteEquipement> lce) {
this.equipements = lce;
}
public void initChoisirEquipement() {
for (CarteEquipement ce : equipements) {
ImageView iv = new ImageView(PlateauController.getImageCarte(ce));
iv.setFitHeight(100);
iv.setFitHeight(100);
iv.setPreserveRatio(true);
hbox.getChildren().add(iv);
iv.setOnMouseClicked(e -> {
equipementSelected = ce;
GestionnaireJeu.notifyPlateau();
});
}
}
} }

View File

@ -5,25 +5,42 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.util.Duration;
import main.Contexte;
import main.GestionnaireJeu; import main.GestionnaireJeu;
import main.Joueur;
import main.JoueurVirtuel;
public class ChoisirJoueur implements Initializable { public class ChoisirJoueur implements Initializable {
@FXML private HBox joueurHaut; @FXML
@FXML private HBox joueurBas; private HBox joueurHaut;
@FXML private Label titre; @FXML
@FXML private Button btn1; private HBox joueurBas;
@FXML private Button btn2; @FXML
@FXML private Button btn3; private Label titre;
@FXML private Button btn4; @FXML
@FXML private Button btn5; private Button btn1;
@FXML private Button btn6; @FXML
@FXML private Button btn7; private Button btn2;
@FXML private Button btn8; @FXML
private Button btn3;
@FXML
private Button btn4;
@FXML
private Button btn5;
@FXML
private Button btn6;
@FXML
private Button btn7;
@FXML
private Button btn8;
private JoueurIHM joueurSelected; private JoueurIHM joueurSelected;
private List<JoueurIHM> listJoueursIHM; private List<JoueurIHM> listJoueursIHM;
@ -95,8 +112,16 @@ public class ChoisirJoueur implements Initializable{
return titre; return titre;
} }
public void setTitre(Label titre) { public void setTitre(Contexte c) {
this.titre = titre; switch (c) {
case ATTAQUER:
titre.setText("Choisissez le joueur à attaquer!");
break;
case CHOISIR_VISION:
titre.setText("Choisissez le joueur à qui passer la carte vision!");
break;
default:
}
} }
public JoueurIHM getJoueurSelected() { public JoueurIHM getJoueurSelected() {
@ -106,4 +131,28 @@ public class ChoisirJoueur implements Initializable{
public void setListJoueursIHM(List<JoueurIHM> joueursIHM) { public void setListJoueursIHM(List<JoueurIHM> joueursIHM) {
this.listJoueursIHM = joueursIHM; this.listJoueursIHM = joueursIHM;
} }
public void fireBtnIA(JoueurVirtuel jIA, Contexte c) {
for (Button b : buttons)
b.setDisable(true);
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(2000), ae -> {
List<Joueur> joueurs = new ArrayList<>();
for (JoueurIHM jihm : listJoueursIHM) {
joueurs.add(jihm.getJoueur());
}
Joueur jchoisi = jIA.choisirJoueur(joueurs, c);
int i = 0;
boolean found = false;
while (!found && i < listJoueursIHM.size()) {
if (listJoueursIHM.get(i).getJoueur().equals(jchoisi)) {
found = true;
buttons.get(i).setDisable(false);
buttons.get(i).fire();
}
i++;
}
}));
timeline.play();
}
} }

View File

@ -1,5 +1,9 @@
package ihm.controller; package ihm.controller;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import carte.CarteEquipement; import carte.CarteEquipement;
import database.RessourceLoader; import database.RessourceLoader;
import ihm.ImageViewEquipement; import ihm.ImageViewEquipement;
@ -62,8 +66,17 @@ public class JoueurIHM {
private void initRevealButton() { private void initRevealButton() {
Button btn = getRevealButton(); Button btn = getRevealButton();
btn.setOnAction(x -> { btn.setOnAction(x -> {
this.joueur.setRevele(true);;
actionReveler(btn);
});
}
this.joueur.reveal(); public void reveler() {
Button btn = getRevealButton();
actionReveler(btn);
}
private void actionReveler(Button btn) {
ImageView iv = this.getCartePersonnage(); ImageView iv = this.getCartePersonnage();
System.out.println(this.joueur.getCartePersonnage()); System.out.println(this.joueur.getCartePersonnage());
Image im = this.pc.getImageCarte(this.joueur.getCartePersonnage()); Image im = this.pc.getImageCarte(this.joueur.getCartePersonnage());
@ -71,10 +84,8 @@ public class JoueurIHM {
iv.setImage(im); iv.setImage(im);
iv.fitHeightProperty().bind(gp.heightProperty()); iv.fitHeightProperty().bind(gp.heightProperty());
initButtonEffect(btn); initButtonEffect(btn);
//btn.setDisable(true);
btn.setText("Utiliser Effet"); btn.setText("Utiliser Effet");
estRevele = true; estRevele = true;
});
} }
public Button getRevealButton() { public Button getRevealButton() {
@ -226,26 +237,36 @@ public class JoueurIHM {
public void ajouterEquipement(CarteEquipement e) { public void ajouterEquipement(CarteEquipement e) {
HBox hb = getPaneEquipement(); HBox hb = getPaneEquipement();
ImageViewEquipement ive = new ImageViewEquipement(e); ImageViewEquipement ive = new ImageViewEquipement(e);
hb.getChildren().add(new ImageViewEquipement(e)); hb.getChildren().add(ive);
ive.setPreserveRatio(true);
ive.fitHeightProperty().bind(hb.heightProperty()); ive.fitHeightProperty().bind(hb.heightProperty());
//ive.fitWidthProperty().bind(hb.widthProperty());
} }
public void retirerEquipement(CarteEquipement e) { public void retirerEquipement(CarteEquipement e) {
HBox hb = getPaneEquipement(); HBox hb = getPaneEquipement();
for (Node n : hb.getChildren()) { List<ImageView> liv = new ArrayList<ImageView>();
for(Iterator<Node> iterator = hb.getChildren().iterator(); iterator.hasNext();) {
Node n = iterator.next();
if (n instanceof ImageViewEquipement) { if (n instanceof ImageViewEquipement) {
ImageViewEquipement ive = (ImageViewEquipement) n; ImageViewEquipement ive = (ImageViewEquipement) n;
if (ive.contains(e)) { if (ive.contains(e)) {
hb.getChildren().remove(ive); liv.add(ive);
} }
} }
} }
hb.getChildren().removeAll(liv);
} }
public String getNom() { public String getNom() {
return this.joueur.getNom(); return this.joueur.getNom();
} }
} }

View File

@ -19,6 +19,8 @@ import javafx.scene.text.Text;
import javafx.util.Duration; import javafx.util.Duration;
import main.Contexte; import main.Contexte;
import main.GestionnaireJeu; import main.GestionnaireJeu;
import main.Joueur;
import main.JoueurVirtuel;
public class LancerDes { public class LancerDes {
private int resultat; private int resultat;
@ -36,31 +38,31 @@ public class LancerDes {
this.contexte = c; this.contexte = c;
} }
public VBox initLancer() { public VBox initLancer(Joueur joueur) {
switch (typeDe) { switch (typeDe) {
case LANCER_DE_4: case LANCER_DE_4:
return initLancerD4(); return initLancerD4(joueur);
case LANCER_DE_6: case LANCER_DE_6:
return initLancerD6(); return initLancerD6(joueur);
case LANCER_DES: case LANCER_DES:
return initLancerBoth(); return initLancerBoth(joueur);
default : default :
return null; return null;
} }
} }
private VBox initLancerD4() { private VBox initLancerD4(Joueur j) {
DieImages images = new DieImages(4); DieImages images = new DieImages(4);
Die die = new Die(images.getImages()); Die die = new Die(images.getImages());
ImageView stackpane = die.getdieFace(); ImageView stackpane = die.getdieFace();
stackpane.setFitHeight(100); stackpane.setFitHeight(100);
stackpane.setFitWidth(100); stackpane.setFitWidth(100);
Button btn = new Button(); Button btn = new Button();
Text txt = new Text("Lancez le dés pour attaquer"); Text txt = new Text("Lancez le dé");
txt.setFont(Font.font(null, null, null, 12)); txt.setFont(Font.font(null, null, null, 12));
txt.setFill(Color.WHITE); txt.setFill(Color.WHITE);
btn.setText("Lancer dés"); btn.setText("Lancer dé");
btn.setOnAction((ActionEvent event) -> { btn.setOnAction((ActionEvent event) -> {
btn.setDisable(true);// Disable Button btn.setDisable(true);// Disable Button
Random random = new Random(); Random random = new Random();
@ -91,20 +93,22 @@ public class LancerDes {
VBox root = new VBox(txt,des, new StackPane(btn)); VBox root = new VBox(txt,des, new StackPane(btn));
root.setAlignment(Pos.CENTER); root.setAlignment(Pos.CENTER);
root.setSpacing(20); root.setSpacing(20);
if(j instanceof JoueurVirtuel)
btn.fire();
return root; return root;
} }
private VBox initLancerD6() { private VBox initLancerD6(Joueur j) {
DieImages images = new DieImages(6); DieImages images = new DieImages(6);
Die die = new Die(images.getImages()); Die die = new Die(images.getImages());
ImageView stackpane = die.getdieFace(); ImageView stackpane = die.getdieFace();
stackpane.setFitHeight(100); stackpane.setFitHeight(100);
stackpane.setFitWidth(100); stackpane.setFitWidth(100);
Button btn = new Button(); Button btn = new Button();
Text txt = new Text("Lancez le dés pour attaquer"); Text txt = new Text("Lancez le dé");
txt.setFont(Font.font(null, null, null, 12)); txt.setFont(Font.font(null, null, null, 12));
txt.setFill(Color.WHITE); txt.setFill(Color.WHITE);
btn.setText("Lancer dés"); btn.setText("Lancer dé");
btn.setOnAction((ActionEvent event) -> { btn.setOnAction((ActionEvent event) -> {
btn.setDisable(true);// Disable Button btn.setDisable(true);// Disable Button
Random random = new Random(); Random random = new Random();
@ -122,8 +126,6 @@ public class LancerDes {
Timeline timeline2 = new Timeline(new KeyFrame( Timeline timeline2 = new Timeline(new KeyFrame(
Duration.millis(2000), Duration.millis(2000),
ae -> { ae -> {
GestionnaireJeu.notifyPlateau(); GestionnaireJeu.notifyPlateau();
})); }));
timeline2.play(); timeline2.play();
@ -135,10 +137,12 @@ public class LancerDes {
VBox root = new VBox(txt,des, new StackPane(btn)); VBox root = new VBox(txt,des, new StackPane(btn));
root.setAlignment(Pos.CENTER); root.setAlignment(Pos.CENTER);
root.setSpacing(20); root.setSpacing(20);
if(j instanceof JoueurVirtuel)
btn.fire();
return root; return root;
} }
private VBox initLancerBoth() { private VBox initLancerBoth(Joueur j) {
DieImages images = new DieImages(6); DieImages images = new DieImages(6);
DieImages images2 = new DieImages(4); DieImages images2 = new DieImages(4);
Die die = new Die(images.getImages()); Die die = new Die(images.getImages());
@ -150,7 +154,7 @@ public class LancerDes {
stackpane.setFitWidth(100); stackpane.setFitWidth(100);
stackpane2.setFitWidth(100); stackpane2.setFitWidth(100);
Button btn = new Button(); Button btn = new Button();
Text txt = new Text("Lancez les dés pour vous deplacer"); Text txt = new Text("Lancez les dés");
txt.setFont(Font.font(null, null, null, 12)); txt.setFont(Font.font(null, null, null, 12));
txt.setFill(Color.WHITE); txt.setFill(Color.WHITE);
btn.setText("Lancer dés"); btn.setText("Lancer dés");
@ -191,6 +195,8 @@ public class LancerDes {
VBox root = new VBox(txt,des, new StackPane(btn)); VBox root = new VBox(txt,des, new StackPane(btn));
root.setAlignment(Pos.CENTER); root.setAlignment(Pos.CENTER);
root.setSpacing(20); root.setSpacing(20);
if(j instanceof JoueurVirtuel)
btn.fire();
return root; return root;
} }

View File

@ -3,16 +3,21 @@ package ihm.controller;
import java.net.URL; import java.net.URL;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.util.Duration;
import main.GestionnaireJeu; import main.GestionnaireJeu;
public class LieuZJ implements Initializable { public class LieuZJ implements Initializable {
@FXML private Button okButton; @FXML
@FXML private ImageView imageView; private Button okButton;
@FXML
private ImageView imageView;
@Override @Override
public void initialize(URL arg0, ResourceBundle arg1) { public void initialize(URL arg0, ResourceBundle arg1) {
@ -26,4 +31,13 @@ public class LieuZJ implements Initializable {
public void setImageView(Image imageCarte) { public void setImageView(Image imageCarte) {
this.imageView.setImage(imageCarte); this.imageView.setImage(imageCarte);
} }
public void fireBtnIA() {
okButton.setDisable(true);
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(2000), ae -> {
okButton.setDisable(false);
okButton.fire();
}));
timeline.play();
}
} }

View File

@ -46,12 +46,6 @@ public class MenuController implements Initializable{
AnchorPane pane = fxmlLoader.load(); AnchorPane pane = fxmlLoader.load();
Scene scene = new Scene(pane); Scene scene = new Scene(pane);
Stage appStage = (Stage) ((Node) mouseEvent.getSource()).getScene().getWindow(); Stage appStage = (Stage) ((Node) mouseEvent.getSource()).getScene().getWindow();
double width = appStage.getWidth();
double height = appStage.getHeight();
double X = appStage.getX();
double Y = appStage.getY();
appStage.setScene(scene); appStage.setScene(scene);
} }

View File

@ -1,6 +1,7 @@
package ihm.controller; package ihm.controller;
import java.awt.Dimension;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -18,6 +19,7 @@ import carte.CarteLieu;
import carte.CartePiochable; import carte.CartePiochable;
import carte.CartePiochable.Type; import carte.CartePiochable.Type;
import database.RessourceLoader; import database.RessourceLoader;
import effet.action.Action;
import ihm.EffetSonore; import ihm.EffetSonore;
import ihm.PopUp; import ihm.PopUp;
import javafx.animation.KeyFrame; import javafx.animation.KeyFrame;
@ -27,7 +29,9 @@ import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Group; import javafx.scene.Group;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.SplitPane;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
@ -42,6 +46,7 @@ import javafx.util.Duration;
import main.Contexte; import main.Contexte;
import main.GestionnaireJeu; import main.GestionnaireJeu;
import main.Joueur; import main.Joueur;
import main.JoueurVirtuel;
public class PlateauController implements Initializable { public class PlateauController implements Initializable {
@ -58,13 +63,16 @@ public class PlateauController implements Initializable {
private PiocherCarte pc; private PiocherCarte pc;
private LancerDes ld; private LancerDes ld;
private Map<Carte,BufferedImage> mapRessourcesCartes; private static Map<Carte,BufferedImage> mapRessourcesCartes;
private Map<String,BufferedImage> mapRessourcesDosCartes; private static Map<String,BufferedImage> mapRessourcesDosCartes;
public static int DICE_SIX = 1; public static int DICE_SIX = 1;
public static int DICE_QUATRE = 0; public static int DICE_QUATRE = 0;
public static int DICE_BOTH = 2; public static int DICE_BOTH = 2;
private final double RES = 200./2250.;
private ResourceBundle resourceBundle;
/** /**
* initialise les données du plateau * initialise les données du plateau
*/ */
@ -72,6 +80,7 @@ public class PlateauController implements Initializable {
public void initialize(URL arg0, ResourceBundle arg1) { public void initialize(URL arg0, ResourceBundle arg1) {
//System.out.println("Création du plateau ..."); //System.out.println("Création du plateau ...");
this.resourceBundle = arg1;
this.joueursIHM = new ArrayList<JoueurIHM>(); this.joueursIHM = new ArrayList<JoueurIHM>();
GestionnaireJeu gj = GestionnaireJeu.getGestionnaireJeu(); GestionnaireJeu gj = GestionnaireJeu.getGestionnaireJeu();
RessourceLoader rl = gj.getRessourceLoader(); RessourceLoader rl = gj.getRessourceLoader();
@ -104,88 +113,6 @@ public class PlateauController implements Initializable {
applyImages(cl,ivs); applyImages(cl,ivs);
// BUTTONS ETC
//System.out.println(this.joueursPane);
/*
this.hboxJoueur.add(joueur1);
this.hboxJoueur.add(joueur2);
this.hboxJoueur.add(joueur3);
this.hboxJoueur.add(joueur4);
for (HBox hbox : hboxJoueur) {
tour.add((AnchorPane) hbox.getChildren().get(0));
VBox carte = (VBox) hbox.getChildren().get(1);
cartePerso.add((ImageView) carte.getChildren().get(0));
btnRevelation.add((Button) carte.getChildren().get(1));
VBox info = (VBox) hbox.getChildren().get(2);
nomJoueur.add((Label) info.getChildren().get(0));
}
this.vboxJoueur.add(joueur5);
this.vboxJoueur.add(joueur6);
this.vboxJoueur.add(joueur7);
this.vboxJoueur.add(joueur8);
for (VBox vbox : vboxJoueur) {
tour.add((AnchorPane) vbox.getChildren().get(0));
HBox joueur = (HBox) vbox.getChildren().get(1);
VBox carte = (VBox) joueur.getChildren().get(1);
cartePerso.add((ImageView) carte.getChildren().get(0));
btnRevelation.add((Button) carte.getChildren().get(1));
VBox info = (VBox) joueur.getChildren().get(0);
nomJoueur.add((Label) info.getChildren().get(0));
}
//initilaisation des boutons se reveler
int i = 0;
for (Button b : btnRevelation) {
int compteur = i;
b.setOnAction(e -> {try {seReveler(compteur);} catch (IOException e1) {e1.printStackTrace();}});
i++;
}
//initialisation des bouton carte personnage
int j = 0;
for (ImageView b : cartePerso) {
int compteur = j;
b.setOnMouseClicked(e -> {try {consulterSaCarte(compteur);} catch (IOException e1) {e1.printStackTrace();}});
j++;
}*/
/*
//initialisation des pions
VBox pionLieux14 = (VBox) lieux.getChildren().get(0);
VBox pionLieux58 = (VBox) lieux.getChildren().get(4);
for (int k=0; k<4; k++) {
pionLieux.add((Circle) pionLieux14.getChildren().get(k));
}
for (int k=0; k<4; k++) {
pionLieux.add((Circle) pionLieux58.getChildren().get(k));
}
VBox pionVie14 = (VBox) lieux.getChildren().get(0);
VBox pionVie58 = (VBox) lieux.getChildren().get(4);
for (int k=0; k<4; k++) {
pionVie.add((Circle) pionVie14.getChildren().get(k));
}
for (int k=0; k<4; k++) {
pionVie.add((Circle) pionVie58.getChildren().get(k));
}
System.out.println("Tour du joueur 1");
try {
final URL fxmlURL = getClass().getResource("../ressources/Jouer_tour(1)lancer_des.fxml");
final ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.langue", Locale.ENGLISH);
final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle);
Pane root = fxmlLoader.load();
root.setPrefSize(255, 180);
tour.get(2).getChildren().setAll(root);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
} }
@ -208,11 +135,15 @@ public class PlateauController implements Initializable {
private void applyImageLieu(ImageView iv, Image im) { private void applyImageLieu(ImageView iv, Image im) {
StackPane sp = (StackPane) iv.getParent();
iv.setImage(im); iv.setImage(im);
iv.fitHeightProperty().bind(sp.heightProperty()); Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
} iv.setFitWidth(RES*screenSize.width);
//iv.fitHeightProperty().bind(sp.heightProperty());
//iv.fitWidthProperty().bind(sp.widthProperty());
iv.setPreserveRatio(true);
//iv.fitWidthProperty().bind(sp.widthProperty());
}
private Pane getPaneJoueur(int i) { private Pane getPaneJoueur(int i) {
@ -333,7 +264,7 @@ public class PlateauController implements Initializable {
this.ld=new LancerDes(typeDice,rolls,c); this.ld=new LancerDes(typeDice,rolls,c);
JoueurIHM jihm = getJoueurIHM(joueur); JoueurIHM jihm = getJoueurIHM(joueur);
jihm.setZoneJoueur(ld.initLancer()); jihm.setZoneJoueur(ld.initLancer(joueur));
} }
public void afficherChoisir(Joueur j, Contexte contexte) throws IOException { public void afficherChoisir(Joueur j, Contexte contexte) throws IOException {
@ -342,17 +273,33 @@ public class PlateauController implements Initializable {
final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle); final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle);
Pane root = (Pane)fxmlLoader.load(); Pane root = (Pane)fxmlLoader.load();
this.cb = fxmlLoader.getController(); this.cb = fxmlLoader.getController();
cb.setTitre(contexte);
if(j instanceof JoueurVirtuel) {
switch(contexte) {
case ACTIVER_EFFET_LIEU :
cb.fireBtnIAEffetLieu();
break;
case ATTAQUER :
cb.fireBtnIAattaquer((JoueurVirtuel)j, j.getJoueursRange());
break;
case CHOISIR_VISION :
cb.fireBtnIAVision();;
break;
}
}
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root); jihm.setZoneJoueur(root);
} }
public void afficherChoisirEquipementVole(Joueur j) throws IOException { public void afficherChoisirEquipementVole(Joueur j, List<CarteEquipement> lce) throws IOException {
final URL fxmlURL = getClass().getResource("/ihm/ressources/Jouer_tour(2a)voler_equipement.fxml"); final URL fxmlURL = getClass().getResource("/ihm/ressources/Jouer_tour(2a)voler_equipement.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();
this.ce = fxmlLoader.getController(); this.ce = fxmlLoader.getController();
this.ce.setListCarteEquipements(lce);
this.ce.initChoisirEquipement();
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root); jihm.setZoneJoueur(root);
} }
@ -369,7 +316,7 @@ public class PlateauController implements Initializable {
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
Pane p = (Pane) jihm.getZoneJoueur(); Pane p = (Pane) jihm.getZoneJoueur();
Pane pane = null; Pane pane = new Pane();
if(p.getChildren() != null && p.getChildren().size() > 0) { if(p.getChildren() != null && p.getChildren().size() > 0) {
@ -397,7 +344,20 @@ public class PlateauController implements Initializable {
Pane root = (Pane)fxmlLoader.load(); Pane root = (Pane)fxmlLoader.load();
LieuZJ lzj = fxmlLoader.getController(); LieuZJ lzj = fxmlLoader.getController();
lzj.setImageView(this.getImageCarte(j.getCarteLieu())); lzj.setImageView(this.getImageCarte(j.getCarteLieu()));
if(j instanceof JoueurVirtuel) lzj.fireBtnIA();
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
if(jihm.getPosition()==4 || jihm.getPosition()==5) {
SplitPane s=(SplitPane)root.getChildren().get(0);
AnchorPane a=(AnchorPane)s.getItems().get(0);
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.setZoneJoueur(root); jihm.setZoneJoueur(root);
} }
public void afficherChoisirJoueur(Joueur j, List<Joueur> joueurs, Contexte contexte) throws IOException { public void afficherChoisirJoueur(Joueur j, List<Joueur> joueurs, Contexte contexte) throws IOException {
@ -405,12 +365,30 @@ 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();
List<JoueurIHM> joueursIHM = toJoueursIHM(joueurs);
this.cj = fxmlLoader.getController(); this.cj = fxmlLoader.getController();
this.cj.setListJoueursIHM(this.joueursIHM); cj.setTitre(contexte);
this.cj.setListJoueursIHM(joueursIHM);
this.cj.initButtons(); this.cj.initButtons();
if(j instanceof JoueurVirtuel)
cj.fireBtnIA((JoueurVirtuel)j, contexte);
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root); jihm.setZoneJoueur(root);
} }
private List<JoueurIHM> toJoueursIHM(List<Joueur> joueurs) {
List<JoueurIHM> list = new ArrayList<JoueurIHM>();
for(Joueur j : joueurs) {
list.add(getJoueurIHM(j));
}
return list;
}
public void afficherPiocher(Joueur j) throws IOException { public void afficherPiocher(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");
@ -422,6 +400,17 @@ public class PlateauController implements Initializable {
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root); jihm.setZoneJoueur(root);
} }
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);
}
public CarteEquipement getChoixEquipementVole(Joueur joueur) { public CarteEquipement getChoixEquipementVole(Joueur joueur) {
JoueurIHM jihm = getJoueurIHM(joueur); JoueurIHM jihm = getJoueurIHM(joueur);
@ -461,6 +450,7 @@ public class PlateauController implements Initializable {
public void updateVieJoueur(Joueur joueur, int damage) { public void updateVieJoueur(Joueur joueur, int damage) {
JoueurIHM jIHM = getJoueurIHM(joueur); JoueurIHM jIHM = getJoueurIHM(joueur);
jIHM.getZoneJoueur().getChildren().setAll();
jIHM.deplacerPionVie(damage); jIHM.deplacerPionVie(damage);
} }
@ -481,13 +471,13 @@ public class PlateauController implements Initializable {
} }
public Image getImageCarte(Carte carte) { public static Image getImageCarte(Carte carte) {
BufferedImage bi = this.mapRessourcesCartes.get(carte); BufferedImage bi = mapRessourcesCartes.get(carte);
return RessourceLoader.toJavaFX(bi); return RessourceLoader.toJavaFX(bi);
} }
public Image getImageDosCarte(String s) { public static Image getImageDosCarte(String s) {
BufferedImage bi = this.mapRessourcesDosCartes.get(s); BufferedImage bi = mapRessourcesDosCartes.get(s);
return RessourceLoader.toJavaFX(bi); return RessourceLoader.toJavaFX(bi);
} }
@ -501,7 +491,6 @@ public class PlateauController implements Initializable {
public void retirerEquipement(Joueur j, CarteEquipement e) { public void retirerEquipement(Joueur j, CarteEquipement e) {
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
jihm.retirerEquipement(e); jihm.retirerEquipement(e);
} }
public void close() throws IOException { public void close() throws IOException {
@ -524,8 +513,14 @@ public class PlateauController implements Initializable {
pu.getStage().hide(); pu.getStage().hide();
} }
}); });
if(j instanceof JoueurVirtuel) {
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(3000), ae -> {
pu.getStage().hide();
}));
timeline.play();
}
pu.display(); pu.display();
} }
public void afficherVision(Joueur j, CartePiochable cartePiochable) throws IOException { public void afficherVision(Joueur j, CartePiochable cartePiochable) throws IOException {
@ -538,7 +533,20 @@ public class PlateauController implements Initializable {
Image im = getImageCarte(cartePiochable); Image im = getImageCarte(cartePiochable);
lzj.setImageView(im); lzj.setImageView(im);
lzj.setText("Cachez la carte vision"); lzj.setText("Cachez la carte vision");
if(j instanceof JoueurVirtuel) lzj.fireBtnIA();
JoueurIHM jihm = getJoueurIHM(j); JoueurIHM jihm = getJoueurIHM(j);
if(jihm.getPosition()==4 || jihm.getPosition()==5) {
SplitPane s=(SplitPane)root.getChildren().get(0);
AnchorPane a=(AnchorPane)s.getItems().get(0);
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); jihm.setZoneJoueur(root);
} }
@ -552,4 +560,49 @@ public class PlateauController implements Initializable {
public void setMapRessourcesDosCartes(Map<String,BufferedImage> mapRessourcesDosCartes) { public void setMapRessourcesDosCartes(Map<String,BufferedImage> mapRessourcesDosCartes) {
this.mapRessourcesDosCartes = mapRessourcesDosCartes; this.mapRessourcesDosCartes = mapRessourcesDosCartes;
} }
private Action choixAction;
public void afficherChoisirAction(Joueur joueur, List<Action> list) {
final URL fxmlURL = getClass().getResource("/ihm/ressources/ChoisirAction.fxml");
final ResourceBundle bundle = ResourceBundle.getBundle("domaine.properties.langue", Locale.FRANCE);
final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle);
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();
});
}
VBox v = new VBox();
v.getChildren().addAll(buttons);
JoueurIHM jihm = getJoueurIHM(joueur);
jihm.setZoneJoueur(v);
}
public Action getChoixAction(Joueur joueur) {
return this.choixAction;
}
private Button interpret(Action a) {
String s = a.toString();
Button b = new Button(s);
return b;
}
public void revealJoueur(Joueur joueur) {
JoueurIHM jihm = getJoueurIHM(joueur);
jihm.reveler();
}
} }

View File

@ -19,7 +19,9 @@ import javafx.scene.Node;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.CheckBox; import javafx.scene.control.CheckBox;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane; import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
@ -43,18 +45,48 @@ public class PlayersController implements Initializable{
@FXML private HBox hb7; @FXML private HBox hb7;
@FXML private HBox hb8; @FXML private HBox hb8;
//pour les radios boutons
@FXML private HBox hbr1;
@FXML private HBox hbr2;
@FXML private HBox hbr3;
@FXML private HBox hbr4;
@FXML private HBox hbr5;
@FXML private HBox hbr6;
@FXML private HBox hbr7;
@FXML private HBox hbr8;
@FXML private ToggleGroup tg1;
@FXML private ToggleGroup tg2;
@FXML private ToggleGroup tg3;
@FXML private ToggleGroup tg4;
@FXML private ToggleGroup tg5;
@FXML private ToggleGroup tg6;
@FXML private ToggleGroup tg7;
@FXML private ToggleGroup tg8;
private List<HBox> ligne = new ArrayList<HBox>(); private List<HBox> ligne = new ArrayList<HBox>();
private List<Button> plus = new ArrayList<Button>(); private List<Button> plus = new ArrayList<Button>();
private List<TextField> txt = new ArrayList<TextField>(); private List<TextField> txt = new ArrayList<TextField>();
private List<CheckBox> ia = new ArrayList<CheckBox>(); private List<CheckBox> ia = new ArrayList<CheckBox>();
private List<HBox> listeHbIA = new ArrayList<HBox>();
private List<RadioButton> listeIaLv1 = new ArrayList<RadioButton>();
private List<RadioButton> listeIaLv2 = new ArrayList<RadioButton>();
private List<RadioButton> listeIaLv3 = new ArrayList<RadioButton>();
private List<ToggleGroup> listeToggleRbIa = new ArrayList<ToggleGroup>();
private HashMap<Integer, Couple> joueurs = new HashMap<Integer, Couple>(); private HashMap<Integer, Couple> joueurs = new HashMap<Integer, Couple>();
private int nbJoueursH = 0; private int nbJoueursH = 0;
private int nbJoueursV = 0; private int nbJoueursV = 0;
/** /**
* recup<EFBFBD>re chaque bouton textField et Checkebox a partir des hbox * recupère chaque bouton textField et Checkebox à partir des hbox
*/ */
@Override @Override
public void initialize(URL arg0, ResourceBundle arg1) { public void initialize(URL arg0, ResourceBundle arg1) {
@ -66,12 +98,44 @@ public class PlayersController implements Initializable{
ligne.add(hb6); ligne.add(hb6);
ligne.add(hb7); ligne.add(hb7);
ligne.add(hb8); ligne.add(hb8);
listeHbIA.add(hbr1);
listeHbIA.add(hbr2);
listeHbIA.add(hbr3);
listeHbIA.add(hbr4);
listeHbIA.add(hbr5);
listeHbIA.add(hbr6);
listeHbIA.add(hbr7);
listeHbIA.add(hbr8);
listeToggleRbIa.add(tg1);
listeToggleRbIa.add(tg2);
listeToggleRbIa.add(tg3);
listeToggleRbIa.add(tg4);
listeToggleRbIa.add(tg5);
listeToggleRbIa.add(tg6);
listeToggleRbIa.add(tg7);
listeToggleRbIa.add(tg8);
for (HBox hb : ligne) { for (HBox hb : ligne) {
txt.add((TextField) hb.getChildren().get(0)); txt.add((TextField) hb.getChildren().get(0));
plus.add((Button) hb.getChildren().get(1)); plus.add((Button) hb.getChildren().get(1));
ia.add((CheckBox) hb.getChildren().get(2)); ia.add((CheckBox) hb.getChildren().get(2));
} }
for (HBox hbr : listeHbIA) {
listeIaLv1.add((RadioButton) hbr.getChildren().get(0));
listeIaLv2.add((RadioButton) hbr.getChildren().get(1));
listeIaLv3.add((RadioButton) hbr.getChildren().get(2));
hbr.getChildren().get(0).setVisible(false);
hbr.getChildren().get(1).setVisible(false);
hbr.getChildren().get(2).setVisible(false);
}
int i=0; int i=0;
for (Button btn : plus) { for (Button btn : plus) {
int compteur = i; int compteur = i;
@ -106,10 +170,10 @@ public class PlayersController implements Initializable{
CheckBox cb = (CheckBox) hb.getChildren().get(2); CheckBox cb = (CheckBox) hb.getChildren().get(2);
if (tf.isEditable()) { if (tf.isEditable()) {
if(cb.isSelected()) { if(cb.isSelected()) {
joueurs.put(i, new Couple(tf.getText(), true)); joueurs.put(i, new Couple(tf.getText(), choixDifficulte(listeToggleRbIa.get(i))));
} }
else { else {
joueurs.put(i, new Couple(tf.getText(), false)); joueurs.put(i, new Couple(tf.getText()));
} }
} }
i++; i++;
@ -170,6 +234,12 @@ public class PlayersController implements Initializable{
plus.get(indice).setOnAction(e -> {enleverJoueur(indice);}); plus.get(indice).setOnAction(e -> {enleverJoueur(indice);});
if (ia.get(indice).isSelected()) { if (ia.get(indice).isSelected()) {
listeIaLv1.get(indice).setVisible(true);
listeIaLv2.get(indice).setVisible(true);
listeIaLv3.get(indice).setVisible(true);
nbJoueursV++; nbJoueursV++;
}else { }else {
nbJoueursH++; nbJoueursH++;
@ -197,16 +267,47 @@ public class PlayersController implements Initializable{
txt.get(indice).setStyle("-fx-background-color: silver;"); txt.get(indice).setStyle("-fx-background-color: silver;");
plus.get(indice).setOnAction(e -> {ajoutJoueur(indice);}); plus.get(indice).setOnAction(e -> {ajoutJoueur(indice);});
if (ia.get(indice).isSelected()) if (ia.get(indice).isSelected()) {
nbJoueursV--; nbJoueursV--;
else }
else {
nbJoueursH--; nbJoueursH--;
}
listeIaLv1.get(indice).setVisible(false);
listeIaLv2.get(indice).setVisible(false);
listeIaLv3.get(indice).setVisible(false);
if (nbJoueursH + nbJoueursV < 4) { if (nbJoueursH + nbJoueursV < 4) {
btnCommencer.setStyle("-fx-background-color: gray; -fx-text-fill: black;"); btnCommencer.setStyle("-fx-background-color: gray; -fx-text-fill: black;");
} }
} }
public int choixDifficulte(ToggleGroup tog) {
if(tog.getSelectedToggle() == tog.getToggles().get(0)) {
System.out.println("ia facile");
return 1;
}
else if (tog.getSelectedToggle() == tog.getToggles().get(1)) {
System.out.println("ia moyenne");
return 2;
}
else if (tog.getSelectedToggle() == tog.getToggles().get(2)) {
System.out.println("ia difficile");
return 3;
}
else {
System.out.println("erreur choix difficulté de l'ia");
return -1;
}
}
public void mettreNomDefaut(int indice) { public void mettreNomDefaut(int indice) {
if (ia.get(indice).isSelected()) { if (ia.get(indice).isSelected()) {
ajoutJoueur(indice); ajoutJoueur(indice);

View File

@ -1,9 +1,10 @@
package ihm.controller; package ihm.controller;
import java.net.URL; import java.net.URL;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Button; import javafx.scene.control.Button;
@ -16,12 +17,16 @@ import javafx.scene.layout.BackgroundImage;
import javafx.scene.layout.BackgroundPosition; import javafx.scene.layout.BackgroundPosition;
import javafx.scene.layout.BackgroundRepeat; import javafx.scene.layout.BackgroundRepeat;
import javafx.scene.layout.BackgroundSize; import javafx.scene.layout.BackgroundSize;
import javafx.util.Duration;
import main.GestionnaireJeu; import main.GestionnaireJeu;
public class RecevoirCarte implements Initializable { public class RecevoirCarte implements Initializable {
@FXML private Button okButton; @FXML
@FXML private Label label; private Button okButton;
@FXML private ImageView imageView; @FXML
private Label label;
@FXML
private ImageView imageView;
@Override @Override
public void initialize(URL arg0, ResourceBundle arg1) { public void initialize(URL arg0, ResourceBundle arg1) {
@ -39,9 +44,17 @@ public class RecevoirCarte implements Initializable {
public void setImageView(Image imageCarte) { public void setImageView(Image imageCarte) {
AnchorPane ap = (AnchorPane) imageView.getParent(); AnchorPane ap = (AnchorPane) imageView.getParent();
BackgroundImage myBI= new BackgroundImage(imageCarte, BackgroundImage myBI = new BackgroundImage(imageCarte, BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT, BackgroundPosition.DEFAULT, new BackgroundSize(BackgroundSize.AUTO, 1.0, true, true, false, false));
new BackgroundSize(BackgroundSize.AUTO,1.0,true,true,false,false));
ap.setBackground(new Background(myBI)); ap.setBackground(new Background(myBI));
} }
public void fireBtnIA() {
okButton.setDisable(true);
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(2000), ae -> {
okButton.setDisable(false);
okButton.fire();
}));
timeline.play();
}
} }

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" styleClass="background" stylesheets="@style/plateau.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ihm.ressources.ChoisirAction">
<children>
<VBox alignment="CENTER" layoutX="-126.0" layoutY="92.0" prefHeight="200.0" prefWidth="226.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>

View File

@ -1,27 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?> <?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?> <?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?> <?import javafx.scene.layout.VBox?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="210.0" prefWidth="260.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ihm.controller.ChoisirEquipement"> <AnchorPane stylesheets="@style/plateau.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ihm.controller.ChoisirEquipement">
<children> <children>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" stylesheets="@style/popUp.css" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <VBox alignment="CENTER" spacing="10.0" styleClass="background" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children> <children>
<Label layoutX="58.0" layoutY="14.0" text="%voler.equipement.joueur" /> <Label alignment="CENTER" contentDisplay="CENTER" styleClass="text" text="%voler.equipement.joueur" />
<ScrollPane layoutX="28.0" layoutY="38.0"> <ScrollPane fx:id="scrollpane" fitToHeight="true" fitToWidth="true" prefHeight="144.0" prefWidth="144.0" vbarPolicy="NEVER" VBox.vgrow="SOMETIMES">
<content> <content>
<HBox> <HBox fx:id="hbox" styleClass="background" />
<children>
<ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" />
</children>
</HBox>
</content> </content>
</ScrollPane> </ScrollPane>
</children> </children>
</Pane> <padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</VBox>
</children> </children>
</AnchorPane> </AnchorPane>

View File

@ -252,7 +252,7 @@
<Insets bottom="25.0" /> <Insets bottom="25.0" />
</padding> </padding>
</GridPane> </GridPane>
<HBox alignment="CENTER" prefHeight="366.0" prefWidth="1125.0" spacing="50.0"> <HBox alignment="CENTER" maxWidth="1280.0" spacing="50.0">
<children> <children>
<VBox alignment="TOP_CENTER"> <VBox alignment="TOP_CENTER">
<children> <children>
@ -290,14 +290,14 @@
</VBox> </VBox>
<VBox alignment="CENTER" spacing="50.0"> <VBox alignment="CENTER" spacing="50.0">
<children> <children>
<GridPane alignment="CENTER" hgap="20.0"> <GridPane alignment="CENTER" hgap="20.0" maxHeight="-Infinity" prefHeight="250.0">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="ALWAYS" /> <ColumnConstraints hgrow="ALWAYS" />
<ColumnConstraints /> <ColumnConstraints />
<ColumnConstraints hgrow="ALWAYS" /> <ColumnConstraints hgrow="ALWAYS" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints /> <RowConstraints vgrow="ALWAYS" />
</rowConstraints> </rowConstraints>
<children> <children>
<GridPane> <GridPane>
@ -324,21 +324,21 @@
<ColumnConstraints /> <ColumnConstraints />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints /> <RowConstraints vgrow="ALWAYS" />
</rowConstraints> </rowConstraints>
<children> <children>
<HBox alignment="TOP_CENTER" maxHeight="-Infinity" maxWidth="-Infinity" spacing="5.0" styleClass="lieux" stylesheets="@style/plateau.css"> <HBox alignment="CENTER" spacing="5.0" styleClass="lieux" stylesheets="@style/plateau.css">
<children> <children>
<StackPane HBox.hgrow="NEVER"> <StackPane HBox.hgrow="NEVER">
<children> <children>
<ImageView fitHeight="150.0" fitWidth="77.0" pickOnBounds="true" preserveRatio="true" /> <ImageView pickOnBounds="true" preserveRatio="true" StackPane.alignment="CENTER" />
<FlowPane prefHeight="150.0" prefWidth="63.0" styleClass="lieu" /> <FlowPane styleClass="lieu" />
</children> </children>
</StackPane> </StackPane>
<StackPane layoutX="39.0" layoutY="12.0" HBox.hgrow="NEVER"> <StackPane layoutX="39.0" layoutY="12.0" maxHeight="360.0" HBox.hgrow="NEVER">
<children> <children>
<ImageView fitHeight="150.0" fitWidth="40.0" pickOnBounds="true" preserveRatio="true" /> <ImageView pickOnBounds="true" preserveRatio="true" />
<FlowPane prefHeight="150.0" prefWidth="13.0" /> <FlowPane />
</children> </children>
</StackPane> </StackPane>
</children> </children>
@ -353,14 +353,14 @@
<children> <children>
<StackPane HBox.hgrow="NEVER"> <StackPane HBox.hgrow="NEVER">
<children> <children>
<ImageView fitHeight="150.0" fitWidth="98.0" pickOnBounds="true" preserveRatio="true" /> <ImageView pickOnBounds="true" preserveRatio="true" />
<FlowPane prefHeight="150.0" prefWidth="64.0" /> <FlowPane />
</children> </children>
</StackPane> </StackPane>
<StackPane HBox.hgrow="NEVER"> <StackPane HBox.hgrow="NEVER">
<children> <children>
<ImageView fitHeight="150.0" fitWidth="93.0" pickOnBounds="true" preserveRatio="true" /> <ImageView pickOnBounds="true" preserveRatio="true" />
<FlowPane prefHeight="150.0" prefWidth="69.0" /> <FlowPane />
</children> </children>
</StackPane> </StackPane>
</children> </children>
@ -370,16 +370,16 @@
</HBox> </HBox>
<HBox alignment="TOP_CENTER" spacing="5.0" styleClass="lieux" stylesheets="@style/plateau.css" GridPane.columnIndex="2"> <HBox alignment="TOP_CENTER" spacing="5.0" styleClass="lieux" stylesheets="@style/plateau.css" GridPane.columnIndex="2">
<children> <children>
<StackPane HBox.hgrow="NEVER"> <StackPane maxHeight="360.0" HBox.hgrow="NEVER">
<children> <children>
<ImageView fitHeight="150.0" fitWidth="111.0" pickOnBounds="true" preserveRatio="true" /> <ImageView pickOnBounds="true" preserveRatio="true" />
<FlowPane prefHeight="150.0" prefWidth="81.0" /> <FlowPane />
</children> </children>
</StackPane> </StackPane>
<StackPane HBox.hgrow="NEVER"> <StackPane maxHeight="360.0" HBox.hgrow="NEVER">
<children> <children>
<ImageView fitHeight="150.0" fitWidth="125.0" pickOnBounds="true" preserveRatio="true" /> <ImageView pickOnBounds="true" preserveRatio="true" />
<FlowPane prefHeight="150.0" prefWidth="113.0" /> <FlowPane />
</children> </children>
</StackPane> </StackPane>
</children> </children>

View File

@ -25,7 +25,7 @@ public class Configuration {
Couple c = nomsJoueurs.get(i); Couple c = nomsJoueurs.get(i);
if(c.isIa()) { if(c.isIa()) {
joueurs.put(i,new JoueurVirtuel(c.getNom())); joueurs.put(i,new JoueurVirtuel(c.getNom(),c.getLvlIa()));
}else { }else {
joueurs.put(i,new Joueur(c.getNom())); joueurs.put(i,new Joueur(c.getNom()));
} }

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 LANCER_DES_6, CHOISIR_VISION, CHOISIR_ACTION
} }

View File

@ -32,20 +32,20 @@ public class ControleurIA {
int diff = jIA.getDifficulte(); int diff = jIA.getDifficulte();
switch (diff) { switch (diff) {
case 1: case 1:
if (res < 25) if (res < 60)
return true; return true;
break; break;
case 2: case 2:
if (res < 50) if (res < 80)
return true; return true;
break; break;
case 3: case 3:
if (res < 75) if (res < 100)
return true; return true;
break; break;
default: default:
} }
} else if (res < 10) } else if (res < 30)
return true; return true;
return false; return false;
} }

View File

@ -29,9 +29,6 @@ public class GestionnaireEquipements {
this.j.addToStat(Joueur.PLAYER_NB_EQUIPEMENTS, -1); this.j.addToStat(Joueur.PLAYER_NB_EQUIPEMENTS, -1);
this.j.removeEquipementIHM(e); this.j.removeEquipementIHM(e);
} }
} }
public List<CarteEquipement> getEquipements() { public List<CarteEquipement> getEquipements() {

View File

@ -13,8 +13,10 @@ import carte.CarteEquipement;
import carte.CarteLieu; import carte.CarteLieu;
import carte.CartePiochable; import carte.CartePiochable;
import carte.CartePiochable.Type; import carte.CartePiochable.Type;
import carte.CarteVision;
import database.RessourceLoader; import database.RessourceLoader;
import effet.Effet; import effet.Effet;
import effet.action.Action;
import ihm.controller.PlateauController; import ihm.controller.PlateauController;
import javafx.application.Platform; import javafx.application.Platform;
@ -49,10 +51,6 @@ public class GestionnaireJeu {
plateau.start(); plateau.start();
} }
public Effet choisirEffet(Joueur joueur, Effet[] effets) {
return effets[0];
}
public void deplacer(Joueur currentJoueur) { public void deplacer(Joueur currentJoueur) {
@ -112,21 +110,46 @@ public class GestionnaireJeu {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Object choisir(Joueur joueur, List<?> list, Class<?> cls) { public Object choisir(Joueur joueur, List<?> list, Class<?> cls) {
if(cls == CarteEquipement.class) { if(cls == CarteEquipement.class) {
return choisirEquipementVole(joueur, (List<CarteEquipement>) list); return choisirEquipementVole(joueur, (List<CarteEquipement>) list);
}else if(cls == Joueur.class) { }else if(cls == Joueur.class) {
return choisirJoueur(joueur, (List<Joueur>) list, Contexte.CHOISIR_VISION);
return choisirJoueur(joueur, (List<Joueur>) list, Contexte.ACTIVER_EFFET_LIEU); }else if(cls == Action.class) {
return choisirAction(joueur, (List<Action>) list, Contexte.CHOISIR_ACTION);
} }
return list.get(0); return list.get(0);
} }
private Action choisirAction(Joueur joueur, List<Action> list, Contexte choisirAction) {
Platform.runLater(() -> {
pc.afficherChoisirAction(joueur,list);
});
this.waitPlateau();
final FutureTask<Action> query = new FutureTask<Action>(new Callable<Action>() {
@Override
public Action call() throws Exception {
return pc.getChoixAction(joueur);
}
});
Platform.runLater(query);
try {
return query.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return null;
}
public CarteEquipement choisirEquipementVole(Joueur joueur, List<CarteEquipement> lce) { public CarteEquipement choisirEquipementVole(Joueur joueur, List<CarteEquipement> lce) {
Platform.runLater(() -> { Platform.runLater(() -> {
try { try {
pc.afficherChoisirEquipementVole(joueur); pc.afficherChoisirEquipementVole(joueur,lce);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -331,5 +354,20 @@ public class GestionnaireJeu {
waitPlateau(); waitPlateau();
} }
public void recevoirCarteVision(Joueur j2, CarteVision carteVision) {
Platform.runLater(() -> {
try {
pc.afficherVision(j2, carteVision);
} catch (IOException e) {
}
});
waitPlateau();
}
public void reveler(Joueur joueur) {
Platform.runLater(() -> {
pc.revealJoueur(joueur);
});
}
} }

View File

@ -8,6 +8,7 @@ import carte.CarteEquipement;
import carte.CarteLieu; import carte.CarteLieu;
import effet.Effet; import effet.Effet;
import personnage.CartePersonnage; import personnage.CartePersonnage;
import personnage.Metamorphe;
import personnage.CartePersonnage.Equipe; import personnage.CartePersonnage.Equipe;
@ -128,11 +129,9 @@ public class Joueur {
} }
public void voler(Joueur j2, CarteEquipement equipement) { public void voler(Joueur j2, CarteEquipement equipement) {
j2.gestionnaireEquipements.retirer(equipement); j2.gestionnaireEquipements.retirer(equipement);
this.gestionnaireEquipements.ajouter(equipement); } this.gestionnaireEquipements.ajouter(equipement);
}
public void attaquer(Joueur j2, int attaqueDice) { public void attaquer(Joueur j2, int attaqueDice) {
@ -208,7 +207,10 @@ public class Joueur {
public String getNom() { public String getNom() {
return this.nom; return this.nom;
} }
public void reveal() { public void reveal() {
GestionnaireJeu gj = GestionnaireJeu.getGestionnaireJeu();
gj.reveler(this);
this.revele = true; this.revele = true;
} }
@ -269,4 +271,12 @@ public class Joueur {
this.cartePersonnage.utiliser(); this.cartePersonnage.utiliser();
} }
} }
public boolean isMetamorph() {
return this.cartePersonnage instanceof Metamorphe;
}
public Joueur choisir(List<Joueur> adjacents, Contexte attaquer) {
return this.plateau.choisir(this,adjacents, attaquer);
}
} }

View File

@ -2,6 +2,7 @@ package main;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random;
import carte.CarteEquipement; import carte.CarteEquipement;
import carte.CarteEquipementStat; import carte.CarteEquipementStat;
@ -15,6 +16,11 @@ public class JoueurVirtuel extends Joueur {
super(name); super(name);
} }
public JoueurVirtuel(String nom, int lvlIa) {
super(nom);
nvDifficulte = lvlIa;
}
public Effet choisirEffet(List<Effet> effets) { public Effet choisirEffet(List<Effet> effets) {
return effets.get((int) Math.floor(Math.random() * effets.size())); return effets.get((int) Math.floor(Math.random() * effets.size()));
} }
@ -51,6 +57,9 @@ public class JoueurVirtuel extends Joueur {
case EFFET_POSITIF_SUR_AUTRES: case EFFET_POSITIF_SUR_AUTRES:
res = choisirJoueurAmi(joueurs); res = choisirJoueurAmi(joueurs);
break; break;
case CHOISIR_VISION:
res = joueurs.get((int) Math.floor(Math.random() * joueurs.size())); // a revoir inshallah
break;
default: default:
res = null; // faire exception? res = null; // faire exception?
} }

View File

@ -22,8 +22,11 @@ public class Pioche {
Collections.shuffle(cartesPiochables); Collections.shuffle(cartesPiochables);
} }
public CartePiochable piocher() { public CartePiochable piocher(Joueur j) {
return cartesPiochables.pop(); CartePiochable cp = cartesPiochables.pop();
GestionnaireJeu gj = GestionnaireJeu.getGestionnaireJeu();
gj.piocher(j,cp);
return cp;
} }
public Stack<CartePiochable> getStack() { public Stack<CartePiochable> getStack() {

View File

@ -289,7 +289,7 @@ public class Plateau extends Thread{
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();
Joueur cible = (Joueur) currentJoueur.choisir(adjacents,Joueur.class); Joueur cible = (Joueur) currentJoueur.choisir(adjacents,Contexte.ATTAQUER);
attaquer(currentJoueur,cible); attaquer(currentJoueur,cible);
if(isPartieTerminee()) break; if(isPartieTerminee()) break;
}else { }else {
@ -315,7 +315,6 @@ public class Plateau extends Thread{
return this.getStat(PARTIE_FINIE) == 1; return this.getStat(PARTIE_FINIE) == 1;
} }
public void deplacer(Joueur currentJoueur) { public void deplacer(Joueur currentJoueur) {
boolean attributed = false; boolean attributed = false;
@ -368,7 +367,7 @@ public class Plateau extends Thread{
public int roll6(Joueur j) { public int roll6(Joueur j) {
int roll = this.rollRandom(6); int roll = this.rollRandom(6);
gj.rollDice(j, PlateauController.DICE_QUATRE, roll); gj.rollDice(j, PlateauController.DICE_SIX, roll);
return roll; return roll;
} }
@ -385,7 +384,7 @@ public class Plateau extends Thread{
int roll6 = rollRandom(6); int roll6 = rollRandom(6);
int sum = Math.abs(roll4+roll6); int sum = Math.abs(roll4+roll6);
gj.rollDice(j, PlateauController.DICE_BOTH, roll4,roll6); gj.rollDice(j, PlateauController.DICE_BOTH, roll4,roll6);
return 3; return sum;
//return Math.abs(roll4+roll6); //return Math.abs(roll4+roll6);
} }
@ -448,16 +447,14 @@ public class Plateau extends Thread{
return (Joueur) gj.choisir(joueur, joueurs, Joueur.class); return (Joueur) gj.choisir(joueur, joueurs, Joueur.class);
} }
public Effet choisirEffet(Joueur joueur, Effet[] effets) {
return gj.choisirEffet(joueur,effets);
}
public Joueur choisirParmisTous(Joueur joueur) { public Joueur choisirParmisTous(Joueur joueur) {
List<Joueur> joueurs = this.getJoueurs(); List<Joueur> joueurs = new ArrayList<Joueur>();
joueurs.addAll(this.getJoueurs());
joueurs.remove(joueur);
return (Joueur) gj.choisir(joueur, joueurs, Joueur.class); return (Joueur) gj.choisir(joueur, joueurs, Joueur.class);
} }
public void updateVieJoueur(Joueur joueur, int damage) { public void updateVieJoueur(Joueur joueur, int damage) {
gj.updateVieJoueur(joueur,damage); gj.updateVieJoueur(joueur,damage);
@ -480,4 +477,8 @@ public class Plateau extends Thread{
gj.retirerEquipement(joueur,e); gj.retirerEquipement(joueur,e);
} }
public Joueur choisir(Joueur joueur, List<Joueur> adjacents, Contexte attaquer) {
return gj.choisirJoueur(joueur, adjacents, attaquer);
}
} }