Guest User

Casse_Brique

a guest
Dec 14th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.90 KB | None | 0 0
  1. class Brique {
  2.   float _x, _y;
  3.   float _w, _h;
  4.   float _a, _v; //couleur et vitesse de changement de couleur
  5.   Brique() {
  6.     //defaut
  7.   }
  8.   Brique(float x, float y, float w, float h) {
  9.     _x = x;
  10.     _y = y;
  11.     _w = w;
  12.     _h = h;
  13.     //Random color
  14.     _a = random(0, 255);
  15.     _v = random(0.3, 0.8);
  16.   }
  17.   void update() {
  18.     //Le changement de couleur se fait a l'infini car on le remet a 0 quand il atteint le maximum.
  19.     if (_a > 255) _a = 0;
  20.     _a +=_v;
  21.   }
  22.   void draw() {
  23.     colorMode(HSB);
  24.     fill(_a, 255, 255);
  25.     stroke(100);
  26.     rect(_x, _y, _w, _h);
  27.     colorMode(RGB);
  28.   }
  29. }
  30. class Pad {
  31.   float _x, _y;
  32.   float _w, _h;
  33.   Pad() {
  34.     //defaut
  35.   }
  36.   Pad(float x, float y, float w, float h) {
  37.     _x = x;
  38.     _y = y;
  39.     _w = w;
  40.     _h = h;
  41.   }
  42.   void collisions(Ball b) {
  43.     if (b._x + b._s/2. >= _x && b._x - b._s/2.<= _x + _w && b._y + b._s/2. >= _y && b._y - b._s/2. <= _y + _h) {
  44.       b._vy *= -1; // Inverse la vitesse en y pour faire rebondir
  45.       if (_w > 30) _w-=3; // Taille du pad diminue a chaque collisions.
  46.     }
  47.   }
  48.   void update() {
  49.     _x = mouseX-_w/2;
  50.   }
  51.   void draw() {
  52.     stroke(0);
  53.     fill(200);
  54.     rect(_x, _y, _w, _h);
  55.   }
  56. }
  57. class Ball {
  58.   float _x, _y;
  59.   float _s;
  60.   float _vx, _vy;
  61.   Ball() {
  62.     //defaut
  63.   }
  64.   Ball(float x, float y, float s) {
  65.     _x = x;
  66.     _y = y;
  67.     _s = s;
  68.   }
  69.   void collisions() {
  70.     if (_x - (_s/2) < 0 || _x + (_s/2) > width) {
  71.       _vx *= -1;
  72.     }
  73.     if (_y - (_s/2) < 0) {
  74.       _vy *= -1;
  75.     }
  76.     if (_y + (_s/2) > height) {
  77.       launch = false;
  78.       vies--;
  79.     }
  80.   }
  81.   boolean collisionsBrique(Brique b) {
  82.     float H = b._y; //Haut
  83.     float G = b._x; //Gauche
  84.     float D = b._x + b._w; //Droite
  85.     float B = b._y + b._h; //bas
  86.     if (_y + (_s/2) >= H && _y - (_s/2) <= B) {
  87.       if (_x + (_s/2) >= G && _x + (_s/2) <= G + 10) {
  88.         _vx *= -1;  
  89.         return true;
  90.       }
  91.       if (_x - (_s/2) <= D && _x - (_s/2) >= D - 10) {
  92.         _vx *= -1;  
  93.         return true;
  94.       }
  95.     }
  96.     if (_x + (_s/2) >= G && _x - (_s/2) <= D) {
  97.       if (_y + (_s/2) >= H && _y + (_s/2) <= H + 10) {
  98.         _vy *= -1;  
  99.         return true;
  100.       }
  101.       if (_y - (_s/2) <= B && _y - (_s/2) >= B-10) {
  102.         _vy *= -1;
  103.         return true;
  104.       }
  105.     }
  106.     return false;
  107.   }
  108.   void update() {
  109.     //Deplacement de la balle en fonction de sa vitesse
  110.     _x += _vx;
  111.     _y += _vy;
  112.   }
  113.   void draw() {
  114.     fill(200);
  115.     noStroke();
  116.     ellipse(_x, _y, _s, _s);
  117.   }
  118. }
  119.  
  120. ArrayList<Brique> briques = new ArrayList<Brique>(); //Tableau dynamique de brique
  121. Pad pad;
  122. Ball ball;
  123. boolean launch = false;
  124. int score, vies;
  125. boolean GAMEOVER = false;
  126.  
  127. //nx : nombre de briques en x
  128. //ny : nombre de briques en y
  129. //yL : limite en y du du placement des briques
  130. //offset : espace entre les briques
  131. void init(int nx, int ny, float yL, float offset) {  
  132.   for (int i = 0; i < nx; i++) {
  133.     for (int j = 0; j < ny; j++) {
  134.       briques.add(new Brique(i * float(width/nx) + offset, j * (yL/ny) + offset, width/nx - offset*2, (yL/ny) - offset*2));
  135.     }
  136.   }
  137. }
  138. //Ecran de fin
  139. void win() {
  140.   textSize(60);
  141.   fill(0, 0, 255);
  142.   text("Gagné ! - score: " + score, width/2, height/2);
  143. }
  144.  
  145. void setup() {
  146.   size(800, 600);  
  147.   frameRate(60);
  148.  
  149.   colorMode(RGB);
  150.  
  151.   pad = new Pad(width/2-25, height - 40, 100, 10);
  152.   ball = new Ball(width/2, height - 50, 10);
  153.  
  154.   //Initialisation des briques : 10 en largeur, 5 en hauteur, limite 200 et espace entre brique de 3px.
  155.   init(10, 5 , 200, 3);
  156.  
  157.   score=0;
  158.   vies=3;
  159. }
  160. void draw() {
  161.   background(25);
  162.  
  163.   for (int i =0; i < briques.size(); i++) {
  164.     briques.get(i).update();
  165.     briques.get(i).draw();
  166.     if (ball.collisionsBrique(briques.get(i))) {
  167.       //Collision avec une brique : on la supprime et on augmente le score
  168.       briques.remove(i);
  169.       score++;
  170.     }
  171.   }
  172.  
  173.   if (GAMEOVER) {
  174.     //Affichage de l'ecran GAMEOVER
  175.     textSize(60);
  176.     fill(0, 0, 255);
  177.     text("Game over - score: " + score, width/2, height/2);
  178.   } else if (briques.size()==0) {
  179.     //Affichage de l'ecran WIN
  180.     win();
  181.   } else {
  182.     //Affichage du jeu
  183.     textSize(100);
  184.     fill(255);
  185.     textAlign(CENTER);
  186.     text(score, width/2, height/2);
  187.     textSize(50);
  188.     text(vies, width/2, height/2+200);
  189.  
  190.     pad.collisions(ball);
  191.     ball.collisions();
  192.     pad.update();
  193.     ball.update();
  194.   }
  195.  
  196.   // (Dessine quand meme le jeu en fond meme si on est dans l'ecran de fin.)
  197.   pad.draw();
  198.   ball.draw();
  199.  
  200.   //Ball en attente d'etre lancée
  201.   if (!launch) {
  202.     ball._x = pad._x + pad._w/2;
  203.     ball._y = pad._y - 20;
  204.   }
  205.   //Test nombre de vies
  206.   if (vies<=0) {
  207.     vies=0;
  208.     GAMEOVER=true;
  209.   }
  210. }
  211.  
  212. void keyPressed() {
  213.   //Lancement de la balle et asignement de la vitesse
  214.   if (key == ' ' && !launch) {
  215.     launch = true;  
  216.     ball._vx = random(1, 1.5)*3;
  217.     ball._vy = -random(1, 1.5)*3;
  218.   }
  219. }
Advertisement
Add Comment
Please, Sign In to add comment