diff --git a/code/src/controller/CreatureController.java b/code/src/controller/CreatureController.java new file mode 100644 index 0000000..9950b5e --- /dev/null +++ b/code/src/controller/CreatureController.java @@ -0,0 +1,293 @@ +package controller; + +import javafx.animation.KeyFrame; +import javafx.animation.Timeline; +import javafx.fxml.FXML; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.util.Duration; +import model.Case; +import model.Creature; +import model.Map; + +import java.util.ArrayList; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +public class CreatureController { + private int lv; + //private final Image dog1 = new Image("/image/creature/dog1.2.png"); + private Creature creature; + @FXML public ImageView creatureImageView; + @FXML public AnchorPane levelRoot; + private Map map; + private MapCreatureController mapCreatureController; + private Case caseCreatureStart; + private Thread Creature; + private String imagePath; + private Case caseActuelle; + private Case caseAncienne; + private Image imagePerso1; + private Image imagePerso2; + private Image imagePerso3; + private Image imagePerso4; + private Image imagePerso5; + private Image imagePerso6; + private Image imagePerso7; + private Image imagePerso8; + private Image imagePerso9; + private Image imagePerso10; + private Image imagePerso11; + private Image imagePerso12; + + public CreatureController(int lv,Map map, ImageView creatureImageView) { + this.lv = lv; + this.map = map; + this.creatureImageView = creatureImageView; + } + public void createCreature(int animal) { + if(animal == 1) { + this.creature = new Creature(1,"/image/creature/dog1.",0,0 ); + //creatureImageView.setImage(dog1); + } + if(animal == 2) { + this.creature = new Creature(2,"/image/personnage/Perso1.",0,0 ); + } + if(animal == 3) { + this.creature = new Creature(2,"/image/personnage/Perso2.",0,0 ); + } + if(animal == 4) { + this.creature = new Creature(2,"/image/personnage/Perso3.",0,0 ); + } + } + + public void playerInitialisation() throws InterruptedException { + mapCreatureController = new MapCreatureController(lv, map); + mapCreatureController.creerMapCreature(); + int max = 4; + int min = 1; + double a = Math.random() * ( max - min ); + int numCreature = (int) Math.round(a) + min; + System.out.println(numCreature); + createCreature(numCreature); + + caseCreatureStart = mapCreatureController.getStartCase(); + creature.setCoordX(caseCreatureStart.getCoordX()); + creature.setCoordY(caseCreatureStart.getCoordY()); + caseActuelle = caseCreatureStart; + + imagePath = getPath(); + String pathStart = imagePath + "2.png"; + creatureImageView.setImage(new Image(pathStart)); + creatureImageView.setId("persoImageView"); + creatureImageView.setFitWidth(35); + creatureImageView.setFitHeight(35); + System.out.println("X :" + getX()); + creatureImageView.setLayoutX(getX()*map.getSizeTile()-5); + creatureImageView.setLayoutY(getY()*map.getSizeTile()-5); + //levelRoot.getChildren().addAll(creatureImageView); + + Creature = new Thread("Creature") { + public void run() { + for (int i = 0; i < mapCreatureController.getSizeListeCase()-1; i++) { + try { + movePlayerNextCase(); + Creature.sleep(800); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + }; + Creature.start(); + + + } + + public void movePlayerNextCase() throws InterruptedException { + caseAncienne = caseActuelle; + System.out.println(caseActuelle); + caseActuelle = mapCreatureController.getNextCase(caseActuelle); + Timeline timelines = new Timeline(); + timelines.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; + int avancementCase = 4; + int tempsattente = 00; + //animation déplacement vers la droite + if(caseActuelle.getCoordX() > caseAncienne.getCoordX()){ + System.out.println(imagePath + "7.png"); + imagePerso7 = new Image(imagePath + "7.png"); + imagePerso8 = new Image(imagePath + "8.png"); + imagePerso9 = new Image(imagePath + "9.png"); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time1), event -> { + creatureImageView.setImage(imagePerso8); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time2), event -> { + creatureImageView.setImage(imagePerso7); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time3), event -> { + creatureImageView.setImage(imagePerso9); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time4), event -> { + creatureImageView.setImage(imagePerso7); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time5), event -> { + creatureImageView.setImage(imagePerso9); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time6), event -> { + creatureImageView.setImage(imagePerso7); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time7), event -> { + creatureImageView.setImage(imagePerso9); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time8), event -> { + creatureImageView.setImage(imagePerso8); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()+avancementCase); + })); + timelines.play(); + } + //animation déplacement vers la gauche + if(caseActuelle.getCoordX() < caseAncienne.getCoordX()){ + imagePerso4 = new Image(imagePath + "4.png"); + imagePerso5 = new Image(imagePath + "5.png"); + imagePerso6 = new Image(imagePath + "6.png"); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time1), event -> { + creatureImageView.setImage(imagePerso5); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time2), event -> { + creatureImageView.setImage(imagePerso4); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time3), event -> { + creatureImageView.setImage(imagePerso6); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time4), event -> { + creatureImageView.setImage(imagePerso4); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time5), event -> { + creatureImageView.setImage(imagePerso6); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time6), event -> { + creatureImageView.setImage(imagePerso4); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time7), event -> { + creatureImageView.setImage(imagePerso6); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time8), event -> { + creatureImageView.setImage(imagePerso5); + creatureImageView.setLayoutX(creatureImageView.getLayoutX()-avancementCase); + })); + timelines.play(); + } + //animation déplacement vers le haut + if(caseActuelle.getCoordY() < caseAncienne.getCoordY()){ + imagePerso10 = new Image(imagePath + "10.png"); + imagePerso11 = new Image(imagePath + "11.png"); + imagePerso12 = new Image(imagePath + "12.png"); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time1), event -> { + creatureImageView.setImage(imagePerso11); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time2), event -> { + creatureImageView.setImage(imagePerso10); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time3), event -> { + creatureImageView.setImage(imagePerso12); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time4), event -> { + creatureImageView.setImage(imagePerso10); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time5), event -> { + creatureImageView.setImage(imagePerso12); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time6), event -> { + creatureImageView.setImage(imagePerso10); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time7), event -> { + creatureImageView.setImage(imagePerso12); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()-avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time8), event -> { + creatureImageView.setImage(imagePerso11); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()-avancementCase); + })); + timelines.play(); + } + //animation déplacement vers le bas + if(caseActuelle.getCoordY() > caseAncienne.getCoordY()){ + imagePerso1 = new Image(imagePath + "1.png"); + imagePerso2 = new Image(imagePath + "2.png"); + imagePerso3 = new Image(imagePath + "3.png"); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time1), event -> { + creatureImageView.setImage(imagePerso2); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time2), event -> { + creatureImageView.setImage(imagePerso1); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time3), event -> { + creatureImageView.setImage(imagePerso3); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time4), event -> { + creatureImageView.setImage(imagePerso1); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time5), event -> { + creatureImageView.setImage(imagePerso3); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time6), event -> { + creatureImageView.setImage(imagePerso1); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time7), event -> { + creatureImageView.setImage(imagePerso3); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()+avancementCase); + })); + timelines.getKeyFrames().add(new KeyFrame(Duration.millis(time8), event -> { + creatureImageView.setImage(imagePerso2); + creatureImageView.setLayoutY(creatureImageView.getLayoutY()+avancementCase); + })); + timelines.play(); + } + } + public String getPath(){ + return creature.getImage(); + } + public int getX(){ + return creature.getCoordX(); + + } + + public int getY(){ + return creature.getCoordY(); + } +} diff --git a/code/src/controller/GamePlayController.java b/code/src/controller/GamePlayController.java index 8f421d0..33412df 100644 --- a/code/src/controller/GamePlayController.java +++ b/code/src/controller/GamePlayController.java @@ -13,6 +13,7 @@ import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.util.Duration; import model.Case; +import model.GameLoop; import model.Map; import java.io.IOException; @@ -28,6 +29,7 @@ public class GamePlayController implements Initializable { @FXML public ImageView persoImageView; @FXML public AnchorPane levelRoot; @FXML public ImageView de; + @FXML public ImageView creatureImageView = new ImageView(); PersoController persoController = new PersoController(); Case caseActuelle; @@ -40,14 +42,20 @@ public class GamePlayController implements Initializable { public void initialize(URL url, ResourceBundle resourceBundle) { String id = levelRoot.getId(); if(id.equals("1")){ - levelRoot.getChildren().addAll(mapController.mapInitialisation(1), persoController.playerInitialisation(1,2, mapController.getMap())); + levelRoot.getChildren().addAll(mapController.mapInitialisation(1), persoController.playerInitialisation(1,2, mapController.getMap()),creatureImageView); persoController.setActualCase(mapController.getStartCase()); + GameLoop loop = new GameLoop(1, mapController.getMap(), creatureImageView); + loop.start(); } else if(id.equals("2")){ + GameLoop loop = new GameLoop(2, mapController.getMap(), creatureImageView); + loop.start(); levelRoot.getChildren().addAll(mapController.mapInitialisation(2), persoController.playerInitialisation(2,2, mapController.getMap())); persoController.setActualCase(mapController.getStartCase()); } else{ + GameLoop loop = new GameLoop(2, mapController.getMap(), creatureImageView); + loop.start(); levelRoot.getChildren().addAll(mapController.mapInitialisation(3), persoController.playerInitialisation(3,2, mapController.getMap())); persoController.setActualCase(mapController.getStartCase()); } diff --git a/code/src/controller/MapController.java b/code/src/controller/MapController.java index ecfe2fd..0abe998 100644 --- a/code/src/controller/MapController.java +++ b/code/src/controller/MapController.java @@ -37,6 +37,7 @@ public class MapController implements Initializable { private final Image w = new Image("/image/terrain/chemin.png"); + @Override public void initialize(java.net.URL location, java.util.ResourceBundle resources) { @@ -45,7 +46,6 @@ public class MapController implements Initializable { public void createMap(int difficulty) { int[][] coordFirstDifficultyMap = {{0,24},{1,24},{2,24},{3,24},{4,24},{5,24},{5,23},{5,22},{5,21},{5,20},{5,19},{5,18},{6,18},{7,18},{8,18},{9,18},{10,18},{11,18},{12,18},{12,17},{12,16},{12,15},{12,14},{12,13},{12,12},{11,12},{10,12},{9,12},{8,12},{7,12},{6,12},{5,12},{4,12},{3,12},{3,11},{3,10},{3,9},{3,8},{3,7},{3,6},{3,5},{3,4},{3,3},{4,3},{5,3},{6,3},{7,3},{8,3},{9,3},{10,3},{11,3},{12,3},{13,3},{14,3},{15,3},{16,3},{17,3},{18,3},{19,3},{19,4},{19,5},{19,6},{19,7},{19,8},{19,9},{19,10},{20,10},{21,10},{22,10},{23,10},{24,10},{24,11},{24,12},{24,13},{24,14},{24,15},{24,16},{24,17},{24,18},{24,19},{24,20},{24,21},{24,22},{24,23},{24,24},{25,24},{26,24},{27,24},{28,24},{29,24}}; - //int[][] coordFirstDifficultyMap = {{0,24},{1,24},{2,24},{3,24},{4,24},{5,24},{5,23},{5,22},{5,21},{5,20},{5,19},{5,18},{6,18},{7,18},{8,18},{9,18},{10,18},{11,18},{12,18},{12,17},{12,16},{12,15},{12,14},{12,13},{12,12},{11,12},{10,12},{9,12},{8,12},{7,12},{6,12},{5,12},{4,12},{3,12},{3,11},{3,10},{3,9},{3,8},{3,7},{3,4},{3,3},{4,3},{5,3},{6,3},{7,3},{8,3},{9,3},{10,3},{11,3},{12,3},{13,3},{14,3},{15,3},{16,3},{17,3},{18,3},{19,3},{19,4},{19,5},{19,6},{19,7},{19,8},{19,9},{19,10},{20,10},{21,10},{22,10},{23,10},{24,10},{24,11},{24,12},{24,13},{24,14},{24,15},{24,16},{24,17},{24,18},{24,19},{24,20},{24,21},{24,22},{24,23},{24,24},{25,24},{26,24},{27,24},{28,24},{29,24}}; if (difficulty == 1) { int j = 1; for(int[] i : coordFirstDifficultyMap){ diff --git a/code/src/controller/MapCreatureController.java b/code/src/controller/MapCreatureController.java new file mode 100644 index 0000000..43f78f9 --- /dev/null +++ b/code/src/controller/MapCreatureController.java @@ -0,0 +1,57 @@ +package controller; + +import model.Case; +import model.Map; +import model.MapCreature; + +public class MapCreatureController { + private int lv; + private MapCreature mapCreature; + private Map map; + private int[][] coordList; + public MapCreatureController(int lv, Map map) { + this.lv = lv; + this.map = map; + } + public void creerMapCreature() { + int[][] coordLv1 = {{0,-1},{0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{9,0},{9,-1}}; + //int[][] coordLv1 = {{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{9,0}}; + //int[][] coordLv1 = {{0,24},{1,24},{2,24},{3,24},{4,24},{5,24},{5,23},{5,22},{5,21},{5,20},{5,19},{5,18},{6,18},{7,18},{8,18},{9,18},{10,18},{11,18},{12,18},{12,17},{12,16},{12,15},{12,14},{12,13},{12,12},{11,12},{10,12},{9,12},{8,12},{7,12},{6,12},{5,12},{4,12},{3,12},{3,11},{3,10},{3,9},{3,8},{3,7},{3,6},{3,5},{3,4},{3,3},{4,3},{5,3},{6,3},{7,3},{8,3},{9,3},{10,3},{11,3},{12,3},{13,3},{14,3},{15,3},{16,3},{17,3},{18,3},{19,3},{19,4},{19,5},{19,6},{19,7},{19,8},{19,9},{19,10},{20,10},{21,10},{22,10},{23,10},{24,10},{24,11},{24,12},{24,13},{24,14},{24,15},{24,16},{24,17},{24,18},{24,19},{24,20},{24,21},{24,22},{24,23},{24,24},{25,24},{26,24},{27,24},{28,24},{29,24}}; + + + mapCreature = new MapCreature(map.getSizeTile(), map.getSizeMap()); + + if(lv == 1) { + int j = 1; + coordList = coordLv1; + for(int[] i : coordList){ + boolean bool = j == 1; + System.out.println("Taille case creature :" +coordList.length); + Case case1 = new Case(j, i[0], i [1], bool, false, map); + mapCreature.addCase(case1); + j++; + } + } + if(lv == 2) { + + } + if(lv == 3) { + + } + } + public MapCreature getMap(){ + return this.mapCreature; + } + + public Case getNextCase(Case c){ + return mapCreature.getNextCase(c); + } + + public Case getStartCase(){ + return mapCreature.getStartCase(); + } + + public int getSizeListeCase(){ + return coordList.length; + } +} diff --git a/code/src/launcher/Main.java b/code/src/launcher/Main.java index dc32b6a..87a9038 100644 --- a/code/src/launcher/Main.java +++ b/code/src/launcher/Main.java @@ -30,9 +30,6 @@ public class Main extends Application { primaryStage.setScene(new Scene(root, 900, 600)); primaryStage.setResizable(false); primaryStage.show(); - //boucle de lecture - GameLoop loop = new GameLoop(); - loop.start(); //début musique ArrayList musiqueListe = new ArrayList(); diff --git a/code/src/model/GameLoop.java b/code/src/model/GameLoop.java index 6d6ed16..124114c 100644 --- a/code/src/model/GameLoop.java +++ b/code/src/model/GameLoop.java @@ -1,19 +1,40 @@ package model; +import controller.CreatureController; +import javafx.fxml.FXML; +import javafx.scene.layout.AnchorPane; + +import javafx.scene.image.ImageView; + public class GameLoop { private Thread timer; + private int lv; + private Map map; + private CreatureController c; + @FXML public ImageView creatureImageView; + + public GameLoop(int lv, Map map, ImageView creatureImageView){ + this.lv = lv; + this.map = map; + this.creatureImageView = creatureImageView; + } public void start() { System.out.println("GameLoop.start()"); + c = new CreatureController(lv,map, creatureImageView); timer = new Thread("timer") { public void run() { - int nbMinutes = 1; + int nbMinutes = 10; int i = 0; while(true) { if(i == 0) { - //action + try { + c.playerInitialisation(); + } catch (InterruptedException e) { + e.printStackTrace(); + } System.out.println("Timer = " + i); - i = 10 * nbMinutes; + i = 60 * nbMinutes; try { timer.sleep(1000); } catch (InterruptedException e) { diff --git a/code/src/model/MapCreature.java b/code/src/model/MapCreature.java new file mode 100644 index 0000000..41bee57 --- /dev/null +++ b/code/src/model/MapCreature.java @@ -0,0 +1,78 @@ +package model; + +import java.util.ArrayList; + +public class MapCreature { + private final int sizeTile; + private final int sizeMap; + private final ArrayList map = new ArrayList<>(); + private int coordStartX; + private int coordStartY; + + public MapCreature(int sizeTile, int sizeMap) { + this.coordStartX = getCoordStartX(); + this.coordStartY = getCoordStartY(); + this.sizeTile = sizeTile; + this.sizeMap = sizeMap; + } + + public void addCase(Case c) { + this.map.add(c); + if(c.isStart){ + setCoordStartX(c.coordX); + setCoordStartY(c.coordY); + } + } + public void removeCase(Case c) { + this.map.remove(c); + } + public ArrayList getMap() { + return this.map; + } + public int getSizeTile() { + return this.sizeTile; + } + public int getSizeMap() { + return this.sizeMap; + } + public int getCoordStartX(){ + return coordStartX; + } + public void setCoordStartX(int x){ + this.coordStartX = x; + } + public int getCoordStartY(){ + return coordStartY; + } + public void setCoordStartY(int y){ + this.coordStartY = y; + } + + public Case getNextCase(Case c){ + int i; + int j; + for(i = 0; i < this.map.size(); i++){ + if(c == this.map.get(i)){ + j=i+1; + System.out.println("i : "+i+" j : "+j); + return this.map.get(j); + } + } + return c; + } + + public Case getStartCase(){ + for(Case c : this.map){ + if(c.isStart){ + System.out.println(c); + return c; + } + } + return null; + } + +} + + + +