prise en compte ia

This commit is contained in:
Kruss 2020-05-14 08:21:42 +02:00
parent b69955273d
commit d858b1bcb9
12 changed files with 253 additions and 78 deletions

View File

@ -49,7 +49,6 @@ public class Main extends Application {
RessourceLoader rl = new RessourceLoader();
rl.loadRessources();
gj.setRessourceLoader(rl);
launch(args);
}
}

View File

@ -1,20 +1,32 @@
package ihm.controller;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.util.Duration;
import main.Contexte;
import main.ControleurIA;
import main.GestionnaireJeu;
import main.Joueur;
import main.JoueurVirtuel;
public class ChoisirBoolean implements Initializable {
@FXML private Button ouiButton;
@FXML private Button nonButton;
@FXML private Label titre;
@FXML
private Button ouiButton;
@FXML
private Button nonButton;
@FXML
private Label titre;
private boolean result;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
@ -54,7 +66,48 @@ public class ChoisirBoolean implements Initializable {
return titre;
}
public void setTitre(Label titre) {
this.titre = titre;
public void setTitre(Contexte c) {
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;
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 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

@ -5,25 +5,42 @@ import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.util.Duration;
import main.Contexte;
import main.GestionnaireJeu;
import main.Joueur;
import main.JoueurVirtuel;
public class ChoisirJoueur implements Initializable {
@FXML private HBox joueurHaut;
@FXML private HBox joueurBas;
@FXML private Label titre;
@FXML private Button btn1;
@FXML private Button btn2;
@FXML private Button btn3;
@FXML private Button btn4;
@FXML private Button btn5;
@FXML private Button btn6;
@FXML private Button btn7;
@FXML private Button btn8;
@FXML
private HBox joueurHaut;
@FXML
private HBox joueurBas;
@FXML
private Label titre;
@FXML
private Button btn1;
@FXML
private Button btn2;
@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 List<JoueurIHM> listJoueursIHM;
@ -95,8 +112,16 @@ public class ChoisirJoueur implements Initializable{
return titre;
}
public void setTitre(Label titre) {
this.titre = titre;
public void setTitre(Contexte c) {
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() {
@ -106,4 +131,31 @@ public class ChoisirJoueur implements Initializable{
public void setListJoueursIHM(List<JoueurIHM> 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);
System.out.println(jchoisi+"oof");
int i = 0;
boolean found = false;
while (!found && i < listJoueursIHM.size()) {
System.out.println(listJoueursIHM.get(i).getJoueur());
if (listJoueursIHM.get(i).getJoueur().equals(jchoisi)) {
found = true;
buttons.get(i).setDisable(false);
buttons.get(i).fire();
}
i++;
}
}));
timeline.play();
}
}

View File

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

View File

@ -3,16 +3,21 @@ package ihm.controller;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.util.Duration;
import main.GestionnaireJeu;
public class LieuZJ implements Initializable {
@FXML private Button okButton;
@FXML private ImageView imageView;
@FXML
private Button okButton;
@FXML
private ImageView imageView;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
@ -26,4 +31,13 @@ public class LieuZJ implements Initializable {
public void setImageView(Image 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

@ -42,6 +42,7 @@ import javafx.util.Duration;
import main.Contexte;
import main.GestionnaireJeu;
import main.Joueur;
import main.JoueurVirtuel;
public class PlateauController implements Initializable {
@ -333,7 +334,7 @@ public class PlateauController implements Initializable {
this.ld=new LancerDes(typeDice,rolls,c);
JoueurIHM jihm = getJoueurIHM(joueur);
jihm.setZoneJoueur(ld.initLancer());
jihm.setZoneJoueur(ld.initLancer(joueur));
}
public void afficherChoisir(Joueur j, Contexte contexte) throws IOException {
@ -342,6 +343,19 @@ public class PlateauController implements Initializable {
final FXMLLoader fxmlLoader = new FXMLLoader(fxmlURL, bundle);
Pane root = (Pane)fxmlLoader.load();
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.getJoueursAdjacents());
break;
default:
break;
}
}
JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root);
}
@ -399,6 +413,7 @@ public class PlateauController implements Initializable {
Pane root = (Pane)fxmlLoader.load();
LieuZJ lzj = fxmlLoader.getController();
lzj.setImageView(this.getImageCarte(j.getCarteLieu()));
if(j instanceof JoueurVirtuel) lzj.fireBtnIA();
JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root);
}
@ -411,8 +426,11 @@ public class PlateauController implements Initializable {
List<JoueurIHM> joueursIHM = toJoueursIHM(joueurs);
this.cj = fxmlLoader.getController();
cj.setTitre(contexte);
this.cj.setListJoueursIHM(joueursIHM);
this.cj.initButtons();
if(j instanceof JoueurVirtuel)
cj.fireBtnIA((JoueurVirtuel)j, contexte);
JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root);
}
@ -554,6 +572,7 @@ public class PlateauController implements Initializable {
Image im = getImageCarte(cartePiochable);
lzj.setImageView(im);
lzj.setText("Cachez la carte vision");
if(j instanceof JoueurVirtuel) lzj.fireBtnIA();
JoueurIHM jihm = getJoueurIHM(j);
jihm.setZoneJoueur(root);

View File

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

@ -28,6 +28,8 @@ public class ControleurIA {
// precondition 2 : on n'appellera pas cette methode si jIA est seul sur le lieu
public boolean choixSiAttaquer(JoueurVirtuel jIA, List<Joueur> joueursLieu) {
double res = getRandomPercentage();
System.out.println(res);
System.out.println(joueursLieu);
if (getEnnemisJoueurs(jIA, joueursLieu).size() > 0) {
int diff = jIA.getDifficulte();
switch (diff) {

View File

@ -116,11 +116,16 @@ public class GestionnaireJeu {
if(cls == CarteEquipement.class) {
return choisirEquipementVole(joueur, (List<CarteEquipement>) list);
}else if(cls == Joueur.class) {
return choisirJoueur(joueur, (List<Joueur>) list, Contexte.ACTIVER_EFFET_LIEU);
return choisirJoueur(joueur, (List<Joueur>) list, Contexte.CHOISIR_VISION);
}
return list.get(0);
}
@SuppressWarnings("unchecked")
public Object choisir(Joueur joueur, List<?> list, Contexte c) {
return choisirJoueur(joueur, (List<Joueur>) list, c);
}
public CarteEquipement choisirEquipementVole(Joueur joueur, List<CarteEquipement> lce) {
Platform.runLater(() -> {
try {

View File

@ -272,4 +272,8 @@ public class Joueur {
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.List;
import java.util.Random;
import carte.CarteEquipement;
import carte.CarteEquipementStat;
@ -51,6 +52,9 @@ public class JoueurVirtuel extends Joueur {
case EFFET_POSITIF_SUR_AUTRES:
res = choisirJoueurAmi(joueurs);
break;
case CHOISIR_VISION:
res = joueurs.get((int) Math.floor(Math.random() * joueurs.size())); // a revoir inshallah
break;
default:
res = null; // faire exception?
}

View File

@ -289,7 +289,7 @@ public class Plateau extends Thread{
if(currentJoueur.choisir(Contexte.ATTAQUER)){
if(currentJoueur.hasOpponents()) {
List<Joueur> adjacents = currentJoueur.getJoueursRange();
Joueur cible = (Joueur) currentJoueur.choisir(adjacents,Joueur.class);
Joueur cible = (Joueur) currentJoueur.choisir(adjacents,Contexte.ATTAQUER);
attaquer(currentJoueur,cible);
if(isPartieTerminee()) break;
}else {
@ -368,7 +368,7 @@ public class Plateau extends Thread{
public int roll6(Joueur j) {
int roll = this.rollRandom(6);
gj.rollDice(j, PlateauController.DICE_QUATRE, roll);
gj.rollDice(j, PlateauController.DICE_SIX, roll);
return roll;
}
@ -385,7 +385,7 @@ public class Plateau extends Thread{
int roll6 = rollRandom(6);
int sum = Math.abs(roll4+roll6);
gj.rollDice(j, PlateauController.DICE_BOTH, roll4,roll6);
return 3;
return sum;
//return Math.abs(roll4+roll6);
}
@ -480,4 +480,8 @@ public class Plateau extends Thread{
gj.retirerEquipement(joueur,e);
}
public Joueur choisir(Joueur joueur, List<Joueur> adjacents, Contexte attaquer) {
return gj.choisirJoueur(joueur, adjacents, attaquer);
}
}