Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package application;
- import java.util.List;
- import javafx.application.Application;
- import javafx.application.Platform;
- import javafx.fxml.FXMLLoader;
- import javafx.scene.Scene;
- import javafx.scene.layout.AnchorPane;
- import javafx.stage.Stage;
- import modele.Balle;
- import modele.GestionBalle;
- import modele.Mangeuse;
- import modele.Rebondissante;
- import vue.FXMLControleurPrincipal;
- import vue.IControleur;
- /**
- *
- */
- public class Controleur extends Application implements IControleur {
- private GestionBalle gestionBalle;
- private FXMLControleurPrincipal vue;
- public Controleur() {
- init();
- }
- @Override
- public void init() {
- gestionBalle = new GestionBalle();
- }
- /**
- * Méthode qui lance l'application.
- *
- * @param stage Le stage JavaFX.
- * @throws Exception
- */
- @Override
- public void start(Stage stage) throws Exception {
- FXMLLoader loader = new FXMLLoader();
- loader.setLocation(getClass().getResource("/vue/InterfaceFXML.fxml"));
- AnchorPane root = loader.load();
- vue = loader.getController();
- Scene scene = new Scene(root);
- scene.getStylesheets().add(getClass().getResource("/css/style.css").toString());
- stage.setScene(scene);
- stage.setTitle("TP4 - Collisionneur");
- stage.setHeight(650);
- stage.setWidth(1095);
- stage.setResizable(false);
- stage.show();
- vue.addControleur(this);
- vue.refreshCanvas();
- vue.setStage(stage);
- }
- /**
- * Méthode qui permet de créer une balle. Lance une exception et un message
- * d'alerte si elle n'arrive pas à se créer.
- *
- * @param pVitesse La vitesse de la balle.
- * @param pAngle L'angle de la balle
- * @param pRayon Rayon de la balle
- * @param pCouleur Couleur de la balle
- * @param pPositionX Position en X de la balle
- * @param pPositionY Position en Y de la balle.
- * @param pType Type de la balle (Rebondissante, Mangeuse)
- */
- @Override
- public void creerBalle(double pVitesse, double pAngle, double pRayon, String pCouleur, double pPositionX, double pPositionY, String pType) {
- checkSpawnBalleMur(pPositionX, pPositionY, pRayon);
- try {
- Balle balle = null;
- switch (pType) {
- case "Rebondissante":
- balle = new Rebondissante(pVitesse, pAngle, pRayon, pCouleur, pPositionX, pPositionY);
- break;
- case "Mangeuse":
- balle = new Mangeuse(pVitesse, pAngle, pRayon, pCouleur, pPositionX, pPositionY);
- break;
- }
- if (balle != null) {
- gestionBalle.ajouterBalleListe(balle);
- }
- } catch (Exception e) {
- System.out.println(e);
- vue.messageAlerte("Erreur", "Erreur!", "Erreur lors de la création d'une balle!");
- }
- }
- /**
- * Vérifie si la balle se créer dans le mur et la déplace en conséquence.
- *
- * @param pPositionX Position en X de la balle.
- * @param pPositionY Position en Y de la balle.
- * @param pRayon Rayon de la balle.
- */
- private void checkSpawnBalleMur(double pPositionX, double pPositionY, double pRayon) {
- double positionEntreBordXGauche = pPositionX - pRayon;
- double positionEntreBordXDroite = pPositionX + pRayon;
- double positionEntreBordYHaut = pPositionY - pRayon;
- double positionEntreBordYBas = pPositionY + pRayon;
- if (positionEntreBordXGauche <= 0) {
- pPositionX -= positionEntreBordXGauche;
- } else if (positionEntreBordXDroite >= vue.getCanvasMaxX()) {
- pPositionX -= positionEntreBordXDroite - vue.getCanvasMaxX();
- }
- if (positionEntreBordYHaut <= 0) {
- pPositionY -= positionEntreBordYHaut;
- } else if (positionEntreBordYBas >= vue.getCanvasMaxY()) {
- pPositionY -= positionEntreBordYBas - vue.getCanvasMaxY();
- }
- }
- /**
- * Méthode qui permet de créer plusieurs balles.
- *
- * @param pNombre Le nombre de balles à créer.
- */
- @Override
- public void creerPlusieursBalles(int pNombre) {
- for (int i = 0; i < pNombre; i++) {
- double vitesse = Balle.genererDouble(Balle.VITESSE_MIN, Balle.VITESSE_MAX);
- double rayon = Balle.genererDouble(Balle.RAYON_MIN, Balle.RAYON_MAX_DEPART);
- double angle = Balle.genererDouble(Balle.ANGLE_MIN, Balle.ANGLE_MAX);
- String couleur = Balle.genererHexaCouleur();
- double positionX = Balle.genererDouble(rayon, vue.getCanvasMaxX() - rayon);
- double positionY = Balle.genererDouble(rayon, vue.getCanvasMaxY() - rayon);
- try {
- Rebondissante balle = new Rebondissante(vitesse, angle, rayon, couleur, positionX, positionY);
- gestionBalle.ajouterBalleListe(balle);
- } catch (Exception e) {
- vue.messageAlerte("Erreur", "Erreur!", "Erreur lors de la création de plusieurs balles!");
- }
- }
- }
- /**
- * Méthode qui fait un rafraichissement du canvas.
- */
- @Override
- public void refreshCanvas() {
- Thread t = new Thread(() -> {
- boolean bool = true;
- while (bool) {
- Platform.runLater(() -> {
- vue.effacerCanvasCourant();
- vue.ajusterLabelNbBalle();
- List<Balle> arrayBalle;
- arrayBalle = gestionBalle.getListeBalle();
- gestionBalle.deplacerBalles();
- gestionBalle.checkCollision(vue.getCanvasMaxX(), vue.getCanvasMaxY());
- arrayBalle.stream().forEach((balle) -> {
- vue.desinerBalle(balle.getCouleur(), balle.getPositionX(), balle.getPositionY(), balle.getRayon());
- });
- });
- try {
- Thread.sleep(10);
- } catch (InterruptedException ex) {
- vue.messageAlerte("Erreur", "Erreur!", "Le Thread a été intérompu!");
- }
- }
- });
- t.setDaemon(true);
- t.start();
- }
- /**
- * Méthode qui réinitialise la liste de balle.
- */
- @Override
- public void reinitialiser() {
- gestionBalle.reinitialiserListeBalle();
- }
- /**
- * Méthode qui retourne le nombre de balle dans la liste.
- *
- * @return Nombre de balle dans la liste.
- */
- @Override
- public int getNombreBalle() {
- return gestionBalle.getListeBalle().size();
- }
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) {
- launch(args);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement