SHARE
TWEET

Untitled

a guest Apr 22nd, 2019 73 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package application;
  2.  
  3. import java.util.List;
  4. import javafx.application.Application;
  5. import javafx.application.Platform;
  6. import javafx.fxml.FXMLLoader;
  7. import javafx.scene.Scene;
  8. import javafx.scene.layout.AnchorPane;
  9. import javafx.stage.Stage;
  10. import modele.Balle;
  11. import modele.GestionBalle;
  12. import modele.Mangeuse;
  13. import modele.Rebondissante;
  14. import vue.FXMLControleurPrincipal;
  15. import vue.IControleur;
  16.  
  17. /**
  18.  *
  19.  */
  20. public class Controleur extends Application implements IControleur {
  21.  
  22.     private GestionBalle gestionBalle;
  23.     private FXMLControleurPrincipal vue;
  24.  
  25.     public Controleur() {
  26.         init();
  27.     }
  28.  
  29.     @Override
  30.     public void init() {
  31.         gestionBalle = new GestionBalle();
  32.     }
  33.  
  34.     /**
  35.      * Méthode qui lance l'application.
  36.      *
  37.      * @param stage Le stage JavaFX.
  38.      * @throws Exception
  39.      */
  40.     @Override
  41.     public void start(Stage stage) throws Exception {
  42.  
  43.         FXMLLoader loader = new FXMLLoader();
  44.         loader.setLocation(getClass().getResource("/vue/InterfaceFXML.fxml"));
  45.         AnchorPane root = loader.load();
  46.         vue = loader.getController();
  47.  
  48.         Scene scene = new Scene(root);
  49.         scene.getStylesheets().add(getClass().getResource("/css/style.css").toString());
  50.  
  51.         stage.setScene(scene);
  52.         stage.setTitle("TP4 - Collisionneur");
  53.         stage.setHeight(650);
  54.         stage.setWidth(1095);
  55.         stage.setResizable(false);
  56.         stage.show();
  57.  
  58.         vue.addControleur(this);
  59.         vue.refreshCanvas();
  60.         vue.setStage(stage);
  61.     }
  62.  
  63.     /**
  64.      * Méthode qui permet de créer une balle. Lance une exception et un message
  65.      * d'alerte si elle n'arrive pas à se créer.
  66.      *
  67.      * @param pVitesse La vitesse de la balle.
  68.      * @param pAngle L'angle de la balle
  69.      * @param pRayon Rayon de la balle
  70.      * @param pCouleur Couleur de la balle
  71.      * @param pPositionX Position en X de la balle
  72.      * @param pPositionY Position en Y de la balle.
  73.      * @param pType Type de la balle (Rebondissante, Mangeuse)
  74.      */
  75.     @Override
  76.     public void creerBalle(double pVitesse, double pAngle, double pRayon, String pCouleur, double pPositionX, double pPositionY, String pType) {
  77.         checkSpawnBalleMur(pPositionX, pPositionY, pRayon);
  78.         try {
  79.             Balle balle = null;
  80.             switch (pType) {
  81.                 case "Rebondissante":
  82.                     balle = new Rebondissante(pVitesse, pAngle, pRayon, pCouleur, pPositionX, pPositionY);
  83.                     break;
  84.                 case "Mangeuse":
  85.                     balle = new Mangeuse(pVitesse, pAngle, pRayon, pCouleur, pPositionX, pPositionY);
  86.                     break;
  87.             }
  88.  
  89.             if (balle != null) {
  90.                 gestionBalle.ajouterBalleListe(balle);
  91.             }
  92.         } catch (Exception e) {
  93.             System.out.println(e);
  94.             vue.messageAlerte("Erreur", "Erreur!", "Erreur lors de la création d'une balle!");
  95.  
  96.         }
  97.  
  98.     }
  99.  
  100.     /**
  101.      * Vérifie si la balle se créer dans le mur et la déplace en conséquence.
  102.      *
  103.      * @param pPositionX Position en X de la balle.
  104.      * @param pPositionY Position en Y de la balle.
  105.      * @param pRayon Rayon de la balle.
  106.      */
  107.     private void checkSpawnBalleMur(double pPositionX, double pPositionY, double pRayon) {
  108.         double positionEntreBordXGauche = pPositionX - pRayon;
  109.         double positionEntreBordXDroite = pPositionX + pRayon;
  110.         double positionEntreBordYHaut = pPositionY - pRayon;
  111.         double positionEntreBordYBas = pPositionY + pRayon;
  112.         if (positionEntreBordXGauche <= 0) {
  113.             pPositionX -= positionEntreBordXGauche;
  114.         } else if (positionEntreBordXDroite >= vue.getCanvasMaxX()) {
  115.             pPositionX -= positionEntreBordXDroite - vue.getCanvasMaxX();
  116.         }
  117.         if (positionEntreBordYHaut <= 0) {
  118.             pPositionY -= positionEntreBordYHaut;
  119.         } else if (positionEntreBordYBas >= vue.getCanvasMaxY()) {
  120.             pPositionY -= positionEntreBordYBas - vue.getCanvasMaxY();
  121.         }
  122.     }
  123.  
  124.     /**
  125.      * Méthode qui permet de créer plusieurs balles.
  126.      *
  127.      * @param pNombre Le nombre de balles à créer.
  128.      */
  129.     @Override
  130.     public void creerPlusieursBalles(int pNombre) {
  131.  
  132.         for (int i = 0; i < pNombre; i++) {
  133.             double vitesse = Balle.genererDouble(Balle.VITESSE_MIN, Balle.VITESSE_MAX);
  134.             double rayon = Balle.genererDouble(Balle.RAYON_MIN, Balle.RAYON_MAX_DEPART);
  135.             double angle = Balle.genererDouble(Balle.ANGLE_MIN, Balle.ANGLE_MAX);
  136.             String couleur = Balle.genererHexaCouleur();
  137.  
  138.             double positionX = Balle.genererDouble(rayon, vue.getCanvasMaxX() - rayon);
  139.             double positionY = Balle.genererDouble(rayon, vue.getCanvasMaxY() - rayon);
  140.  
  141.             try {
  142.                 Rebondissante balle = new Rebondissante(vitesse, angle, rayon, couleur, positionX, positionY);
  143.                 gestionBalle.ajouterBalleListe(balle);
  144.             } catch (Exception e) {
  145.                 vue.messageAlerte("Erreur", "Erreur!", "Erreur lors de la création de plusieurs balles!");
  146.             }
  147.  
  148.         }
  149.     }
  150.  
  151.     /**
  152.      * Méthode qui fait un rafraichissement du canvas.
  153.      */
  154.     @Override
  155.     public void refreshCanvas() {
  156.         Thread t = new Thread(() -> {
  157.             boolean bool = true;
  158.             while (bool) {
  159.                 Platform.runLater(() -> {
  160.                     vue.effacerCanvasCourant();
  161.                     vue.ajusterLabelNbBalle();
  162.                     List<Balle> arrayBalle;
  163.                     arrayBalle = gestionBalle.getListeBalle();
  164.                     gestionBalle.deplacerBalles();
  165.                     gestionBalle.checkCollision(vue.getCanvasMaxX(), vue.getCanvasMaxY());
  166.                     arrayBalle.stream().forEach((balle) -> {
  167.                         vue.desinerBalle(balle.getCouleur(), balle.getPositionX(), balle.getPositionY(), balle.getRayon());
  168.                     });
  169.                 });
  170.                 try {
  171.                     Thread.sleep(10);
  172.                 } catch (InterruptedException ex) {
  173.                     vue.messageAlerte("Erreur", "Erreur!", "Le Thread a été intérompu!");
  174.  
  175.                 }
  176.             }
  177.         });
  178.         t.setDaemon(true);
  179.         t.start();
  180.     }
  181.  
  182.     /**
  183.      * Méthode qui réinitialise la liste de balle.
  184.      */
  185.     @Override
  186.     public void reinitialiser() {
  187.         gestionBalle.reinitialiserListeBalle();
  188.     }
  189.  
  190.     /**
  191.      * Méthode qui retourne le nombre de balle dans la liste.
  192.      *
  193.      * @return Nombre de balle dans la liste.
  194.      */
  195.     @Override
  196.     public int getNombreBalle() {
  197.         return gestionBalle.getListeBalle().size();
  198.     }
  199.  
  200.     /**
  201.      * @param args the command line arguments
  202.      */
  203.     public static void main(String[] args) {
  204.         launch(args);
  205.     }
  206. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top