Advertisement
Tecnelm

Untitled

Jan 24th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.04 KB | None | 0 0
  1. // taille des Objets
  2. int tVaisseau = 30;
  3. int tEnnemis = 30;
  4. //vitesse ennemis +vaisseau
  5. int eSpeed = 2;
  6. int vSpeed = 2;
  7. // coordonnée vaisseau
  8. int xVaisseau;
  9. int yVaisseau;
  10. int xs1,ys1,xs2,ys2,xs3,ys3;
  11. // position enemies
  12. ArrayList<Integer> xE = new ArrayList();
  13. ArrayList<Integer> yE = new ArrayList();
  14. // touche du jeu
  15. boolean up= false;
  16. boolean down= false;
  17. boolean left= false;
  18. boolean right=false;
  19. boolean z= false;
  20. boolean q= false;
  21. boolean s= false;
  22. boolean d= false;
  23. // mode de jeu
  24. int screen ;
  25. // aire triangle
  26. double aireT;
  27. //
  28. PFont f;
  29.  
  30. void setup(){
  31. size(800,600);
  32. f = createFont("TestPolice.otf",1);
  33. smooth();
  34. xVaisseau = width/2;
  35. yVaisseau = height/2;
  36. frameRate(180);
  37. screen = 0;
  38. aireT = triangleA(xVaisseau, yVaisseau,xVaisseau+tVaisseau, (yVaisseau-tVaisseau/2), xVaisseau+tVaisseau, (yVaisseau+tVaisseau/2));
  39. }
  40.  
  41. void draw(){
  42. if(screen == 0)
  43. ecranAcceuil();
  44. else if (screen == 1){
  45. background(0);
  46. noCursor();
  47.  
  48. if((int)random(0,30)==0)
  49. ajouterEnnemis();
  50. bougerEnnemi();
  51. bougerVaisseau();
  52. collision();
  53. affichage();
  54. }
  55. }
  56. void mousePressed(){
  57. if (screen == 0) screen=1;
  58. }
  59. void ecranAcceuil(){
  60.  
  61. background(0);
  62. fill(0);
  63. stroke(255,0,0);
  64. ellipse(width/2,height/2,200,80);
  65. textFont(f,75);
  66. textAlign(CENTER);
  67. fill(255,0,0);
  68. text("BALLOON BREAKER",width/2,height/5);
  69. textFont(f,30);
  70. text("PLAY/JOUER",width/2,height/2+10);
  71. }
  72. void ajouterEnnemis(){
  73. xE.add(tEnnemis);
  74. yE.add((int)(Math.random()*(height-tEnnemis)));
  75. }
  76.  
  77. void bougerEnnemi(){
  78. for(int i=0;i<xE.size();i++){
  79. xE.set(i,xE.get(i)+1);
  80. }
  81. }
  82.  
  83. void bougerVaisseau(){
  84. if((z||up) && (ys2>0)) yVaisseau=yVaisseau-vSpeed;
  85. if((s||down) && (ys3<height)) yVaisseau=yVaisseau+vSpeed;
  86. if((q||left) && (xs1>0)) xVaisseau=xVaisseau-vSpeed;
  87. if((d||right) && (xs2<width)) xVaisseau=xVaisseau+vSpeed;
  88.  
  89. // nouveau sommet triangle
  90. xs1 =xVaisseau;
  91. ys1=yVaisseau;
  92. xs2=xVaisseau+tVaisseau;
  93. ys2=yVaisseau-tVaisseau/2;
  94. xs3=xVaisseau+tVaisseau;
  95. ys3=yVaisseau+tVaisseau/2;
  96. }
  97.  
  98. void keyPressed(){
  99. switch(keyCode){
  100. case UP: up = true; break;
  101. case DOWN : down = true; break;
  102. case LEFT : left = true; break;
  103. case RIGHT : right = true; break;
  104. case 90: z= true; break;//z
  105. case 81: q= true; break;//q
  106. case 83: s= true; break;//s
  107. case 68: d= true; break;//d
  108.  
  109. }
  110. }
  111. void keyReleased(){
  112. switch(keyCode){
  113. case UP: up = false; break;
  114. case DOWN : down = false; break;
  115. case LEFT : left = false; break;
  116. case RIGHT : right = false; break;
  117. case 90: z= false; break;//z
  118. case 81: q= false; break;//q
  119. case 83: s= false; break;//s
  120. case 68: d= false; break;//d
  121. }
  122. }
  123.  
  124. void collision(){
  125. float x,y,r;
  126. r=tEnnemis/2;
  127.  
  128. for (int i=0 ; i<xE.size();i++)
  129. {
  130. x=xE.get(i);y=yE.get(i);
  131. if(x-tEnnemis>width){
  132. xE.remove(i);
  133. yE.remove(i);
  134. }
  135.  
  136. else if((y+r > yVaisseau-tVaisseau/2 && y-tEnnemis/2< yVaisseau+tVaisseau/2 )&&( x+tEnnemis/2>xVaisseau && x-tEnnemis/2<xVaisseau+tVaisseau)){
  137. if (colision(x,y,r))
  138. {
  139. xE.remove(i);
  140. yE.remove(i);
  141. }
  142. }
  143. }
  144. }
  145.  
  146. float triangleA(int px1, int py1 , int px2 ,int py2 ,int px3 , int py3){ // calcule l'aire d'un triangle
  147.  
  148. float A , longA,longB,longC ,longD;
  149. // A = 1/2||AB vectoriel AC||
  150. longA=px1-px3;
  151. longB=py1-py3;
  152. longC=px2-px3;
  153. longD= py2-py3;
  154.  
  155. A=0.5* abs((longA*longD)-(longB*longC));
  156. return A;
  157. }
  158.  
  159. boolean colision(float x,float y ,float r){
  160. int xC,yC,xG,yG; // point sur le cerlcle de du vecteur centre gravité triangle centre cercle
  161. float longux,longuy,angle ,A1,A2,A3,AT;
  162. // centre de gravité du triangle
  163. xG = (xs1+xs2+xs3)/3;
  164. yG = (ys1+ys2+ys3)/3;
  165. longux = xG-x;
  166. longuy = yG-y;
  167. angle = atan2(longuy,longux);
  168. //calcul du potentiel point de colision
  169. xC= int(x+cos(angle)*r);
  170. yC =int(y+sin(angle)*r);
  171. // calcule des 3 aires créées par le point potentiel de collision
  172. A1=triangleA(xC,yC,xs1,ys1,xs2,ys2);
  173. A2=triangleA(xC,yC,xs2,ys2,xs3,ys3);
  174. A3=triangleA(xC,yC,xs1,ys1,xs3,ys3);
  175.  
  176. AT= A1+A2+A3;
  177. // la somme des 3 aire est egal alors le point est dans le triangle
  178.  
  179. if (aireT==AT) return true;
  180. else if(colC(xs1 ,ys1 , x,y,r)) return true;
  181. else if(colC(xs2 ,ys2 , x,y,r)) return true;
  182. else if(colC(xs3 ,ys3 , x,y,r)) return true;
  183.  
  184. return false;
  185. }
  186.  
  187. boolean colC(float xs,float ys,float xc,float yc,float r){// collision avec cercle et point sommet du triangle
  188. return (xs-xc)*(xs-xc)+(ys-yc)*(ys-yc)<= r*r;
  189.  
  190. }
  191.  
  192. void affichage(){
  193. int x,y;
  194.  
  195. for(int i = 0;i<xE.size();i++){ // affiche chaque ennemi
  196. x = xE.get(i); y = yE.get(i);
  197. fill(255);
  198. stroke(255);
  199. ellipse(x,y,tEnnemis,tEnnemis);
  200. }
  201. fill(255,0,0);
  202. stroke(255,0,0);
  203. triangle(xs1, ys1,xs2 ,ys2, xs3, ys3); // affiche triangle
  204.  
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement