Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.86 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement