You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

373 lines
18 KiB

package controller;
import com.jfoenix.controls.JFXButton;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;
import model.Case;
import model.GameLoop;
import model.GameTime;
import model.Map;
import java.awt.*;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Objects;
import java.util.ResourceBundle;
public class GamePlayController implements Initializable {
private final int avancementCase = 4;
private final PersoController persoController = new PersoController();
private final MapController mapController = new MapController();
@FXML public ImageView persoImageView;
@FXML public AnchorPane levelRoot;
@FXML public ImageView de;
@FXML public ImageView creatureImageView = new ImageView();
@FXML public ImageView playerImagePerso;
boolean finJeu = false;
GameTime gameTime;
GameLoop loop;
Text textEnd;
public int difficulty;
public int perso;
private Case caseActuelle, caseAncienne;
private int i, diceNumber;
private Thread personnage;
private String pathPerso;
private JFXButton button;
private Boolean PersoMouv;
@FXML
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
}
public void gameLauncher(){
levelRoot.getChildren().addAll(mapController.mapInitialisation(this.difficulty), persoController.playerInitialisation(this.difficulty,this.perso, mapController.getMap()), creatureImageView);
persoController.setActualCase(mapController.getStartCase());
playerImagePerso.setImage(new Image("image/personnage/Perso" + this.perso + ".2.png"));
loop = new GameLoop(this.difficulty, mapController.getMap(), creatureImageView);
loop.start();
Text text = new Text();
text.setText("Time : ");
text.setX(1000);
text.setY(50);
text.setFill(Color.WHITE);
text.setStyle("-fx-font: 20 arial;");
Text textTimer = new Text();
textTimer.setText("");
textTimer.setX(1070);
textTimer.setY(50);
textTimer.setFill(Color.WHITE);
textTimer.setStyle("-fx-font: 20 arial;");
textEnd = new Text();
textEnd.setText("");
textEnd.setX(500);
textEnd.setY(500);
textEnd.setFill(Color.WHITE);
textEnd.setStyle("-fx-font: 100 arial; ");
button = new JFXButton("");
levelRoot.getChildren().addAll(text,textTimer,textEnd,button);
gameTime = new GameTime(textTimer);
gameTime.start();
PersoMouv = false;
}
public void timer(){
if(finJeu){
gameTime.stop();
loop.stop();
}
}
public void movePlayerNextCase() throws InterruptedException {
persoImageView = persoController.persoImageView;
caseActuelle = persoController.getActualCase();
pathPerso = persoController.getPath();
caseAncienne = caseActuelle;
persoController.setOldCase(caseAncienne);
caseActuelle = mapController.getNextCase(caseActuelle);
persoController.setActualCase(caseActuelle);
Timeline timeline = new Timeline();
timeline.setCycleCount(1);
int time1 = 100;
int time2 = 200;
int time3 = 300;
int time4 = 400;
int time5 = 500;
int time6 = 600;
int time7 = 700;
int time8 = 800;
if(caseActuelle != null){
//animation déplacement vers la droite
if (caseActuelle.getCoordX() > caseAncienne.getCoordX()) {
System.out.println(pathPerso + "7.png");
Image imagePerso7 = new Image(Objects.requireNonNull(getClass().getClassLoader().getResource(pathPerso + "7.png")).toExternalForm());
Image imagePerso8 = new Image(Objects.requireNonNull(getClass().getClassLoader().getResource(pathPerso + "8.png")).toExternalForm());
Image imagePerso9 = new Image(Objects.requireNonNull(getClass().getClassLoader().getResource(pathPerso + "9.png")).toExternalForm());
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time1), event -> {
persoImageView.setImage(imagePerso8);
persoImageView.setLayoutX(persoImageView.getLayoutX() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time2), event -> {
persoImageView.setImage(imagePerso7);
persoImageView.setLayoutX(persoImageView.getLayoutX() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time3), event -> {
persoImageView.setImage(imagePerso9);
persoImageView.setLayoutX(persoImageView.getLayoutX() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time4), event -> {
persoImageView.setImage(imagePerso7);
persoImageView.setLayoutX(persoImageView.getLayoutX() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time5), event -> {
persoImageView.setImage(imagePerso9);
persoImageView.setLayoutX(persoImageView.getLayoutX() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time6), event -> {
persoImageView.setImage(imagePerso7);
persoImageView.setLayoutX(persoImageView.getLayoutX() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time7), event -> {
persoImageView.setImage(imagePerso9);
persoImageView.setLayoutX(persoImageView.getLayoutX() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time8), event -> {
persoImageView.setImage(imagePerso8);
persoImageView.setLayoutX(persoImageView.getLayoutX() + avancementCase);
}));
timeline.play();
}
//animation déplacement vers la gauche
if (caseActuelle.getCoordX() < caseAncienne.getCoordX()) {
Image imagePerso4 = new Image(getClass().getClassLoader().getResource(pathPerso + "4.png").toExternalForm());
Image imagePerso5 = new Image(getClass().getClassLoader().getResource(pathPerso + "5.png").toExternalForm());
Image imagePerso6 = new Image(getClass().getClassLoader().getResource(pathPerso + "6.png").toExternalForm());
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time1), event -> {
persoImageView.setImage(imagePerso5);
persoImageView.setLayoutX(persoImageView.getLayoutX() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time2), event -> {
persoImageView.setImage(imagePerso4);
persoImageView.setLayoutX(persoImageView.getLayoutX() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time3), event -> {
persoImageView.setImage(imagePerso6);
persoImageView.setLayoutX(persoImageView.getLayoutX() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time4), event -> {
persoImageView.setImage(imagePerso4);
persoImageView.setLayoutX(persoImageView.getLayoutX() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time5), event -> {
persoImageView.setImage(imagePerso6);
persoImageView.setLayoutX(persoImageView.getLayoutX() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time6), event -> {
persoImageView.setImage(imagePerso4);
persoImageView.setLayoutX(persoImageView.getLayoutX() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time7), event -> {
persoImageView.setImage(imagePerso6);
persoImageView.setLayoutX(persoImageView.getLayoutX() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time8), event -> {
persoImageView.setImage(imagePerso5);
persoImageView.setLayoutX(persoImageView.getLayoutX() - avancementCase);
}));
timeline.play();
}
//animation déplacement vers le haut
if (caseActuelle.getCoordY() < caseAncienne.getCoordY()) {
Image imagePerso10 = new Image(getClass().getClassLoader().getResource(pathPerso + "10.png").toExternalForm());
Image imagePerso11 = new Image(getClass().getClassLoader().getResource(pathPerso + "11.png").toExternalForm());
Image imagePerso12 = new Image(getClass().getClassLoader().getResource(pathPerso + "12.png").toExternalForm());
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time1), event -> {
persoImageView.setImage(imagePerso11);
persoImageView.setLayoutY(persoImageView.getLayoutY() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time2), event -> {
persoImageView.setImage(imagePerso10);
persoImageView.setLayoutY(persoImageView.getLayoutY() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time3), event -> {
persoImageView.setImage(imagePerso12);
persoImageView.setLayoutY(persoImageView.getLayoutY() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time4), event -> {
persoImageView.setImage(imagePerso10);
persoImageView.setLayoutY(persoImageView.getLayoutY() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time5), event -> {
persoImageView.setImage(imagePerso12);
persoImageView.setLayoutY(persoImageView.getLayoutY() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time6), event -> {
persoImageView.setImage(imagePerso10);
persoImageView.setLayoutY(persoImageView.getLayoutY() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time7), event -> {
persoImageView.setImage(imagePerso12);
persoImageView.setLayoutY(persoImageView.getLayoutY() - avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time8), event -> {
persoImageView.setImage(imagePerso11);
persoImageView.setLayoutY(persoImageView.getLayoutY() - avancementCase);
}));
timeline.play();
}
//animation déplacement vers le bas
if (caseActuelle.getCoordY() > caseAncienne.getCoordY()) {
Image imagePerso1 = new Image(getClass().getClassLoader().getResource(pathPerso + "1.png").toExternalForm());
Image imagePerso2 = new Image(getClass().getClassLoader().getResource(pathPerso + "2.png").toExternalForm());
Image imagePerso3 = new Image(getClass().getClassLoader().getResource(pathPerso + "3.png").toExternalForm());
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time1), event -> {
persoImageView.setImage(imagePerso2);
persoImageView.setLayoutY(persoImageView.getLayoutY() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time2), event -> {
persoImageView.setImage(imagePerso1);
persoImageView.setLayoutY(persoImageView.getLayoutY() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time3), event -> {
persoImageView.setImage(imagePerso3);
persoImageView.setLayoutY(persoImageView.getLayoutY() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time4), event -> {
persoImageView.setImage(imagePerso1);
persoImageView.setLayoutY(persoImageView.getLayoutY() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time5), event -> {
persoImageView.setImage(imagePerso3);
persoImageView.setLayoutY(persoImageView.getLayoutY() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(time6), event -> {
persoImageView.setImage(imagePerso1);
persoImageView.setLayoutY(persoImageView.getLayoutY() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(800), event -> {
persoImageView.setImage(imagePerso3);
persoImageView.setLayoutY(persoImageView.getLayoutY() + avancementCase);
}));
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(900), event -> {
persoImageView.setImage(imagePerso2);
persoImageView.setLayoutY(persoImageView.getLayoutY() + avancementCase);
}));
timeline.play();
}
if(caseActuelle.isEnd()){
textEnd.setText("Fin");
finJeu = true;
timer();
returnToStart();
}
}else{
System.out.println("Case null");
}
}
public void returnToStart(){
button.setStyle("-fx-background-color: #EB9C0A; -fx-text-fill: white;");
button.setLayoutX(1071);
button.setLayoutY(752);
button.setPrefHeight(30);
button.setPrefWidth(119);
button.setText("Retour au début");
button.setOnAction(event -> {
AnchorPane pane = null;
try {
pane = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/MainPage.fxml")));
Stage a = new Stage();
a.setTitle("The Adventurer");
a.setScene(new Scene(pane, 900, 600));
a.setResizable(false);
a.show();
Stage stage = (Stage) levelRoot.getScene().getWindow();
stage.close();
} catch (IOException e) {
e.printStackTrace();
}
levelRoot.getChildren().setAll(pane);
}
);
}
public void lancerDe() {
//Case actual = persoController.getActualCase();
if(PersoMouv == false) {
animationDe();
}
//verification(actual);
}
public void verification(Case actual) {
Map map = mapController.getMap();
ArrayList<Case> array = map.getMap();
actual = mapController.getCase(actual, diceNumber);
for (Case c : array) {
if (actual.getCoordX() == c.getCoordX() && actual.getCoordY() == c.getCoordY() && c.isBonus()) {
System.out.println("BONUS");
System.out.println("X perso : " + actual.getCoordX() + " Y perso : " + actual.getCoordY() + " X perso : " + c.getCoordX() + " Y perso : " + c.getCoordY() + " Bonus : " + c.isBonus());
}
if (actual.getCoordX() == c.getCoordX() && actual.getCoordY() == c.getCoordY() && c.isMalus()) {
System.out.println("MALUS");
}
}
}
public void animationDe() {
personnage = new Thread("personnage") {
public void run() {
i = 0;
Timeline timeline = new Timeline();
timeline.setCycleCount(1);
for (i = 0; i < 10; i++) {
diceNumber = (int) (Math.random() * 6 + 1);
String path = "image/dé/d" + diceNumber + ".png";
timeline.getKeyFrames().add(new KeyFrame(Duration.millis(50 * i), event -> de.setImage(new Image(path))));
}
timeline.play();
for (i = 0; i < diceNumber; i++) {
try {
PersoMouv = true;
movePlayerNextCase();
sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
PersoMouv = false;
}
};
personnage.start();
}
}