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
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();
|
|
}
|
|
}
|