Créer un site internet

MUX101

Projet

 

 

Classe principale

//################################################################################
//        INITIALISATION VARIABLE ET IMPORT LIBRAIRIE
//################################################################################
//on importe la librairie minim afin de pouvoir jouer les sons du dossier data
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
//Pour l'utilisation du son, on définit lesvariables utilisées par minim
Minim minim;
AudioSample Do,re,mi,fa,sol,la,si,Do2,Do_d,fa_d,sol_d,la_d,re_d;
//////
//variables pour les couleurs
//////
float R = random(0, 255);
float G = random(0, 255);
float B = random(0, 255);
//////
//on initialise les variables déplacements
//////
int dx = 1; int dx2 = 1; int dx3 = 1; int dx4 = 1;
int dy = 0; int dy2 = 0; int dy3 = 0; int dy4 = 0;
//////
//variable clavier: on lance la balle si clavier = true, permet de jouer une mélodie sans interaction de la balle
//////
boolean clavier = false;

//On initialise les balles
Balle balle1 = new Balle(60, 360, color(R, G, B));
Balle balle2 = new Balle(540, 360, color(random(255), random(255), random(255)));
Balle balle3 = new Balle(540, 480, color(random(255), random(255), random(255)));
Balle balle4 = new Balle(60, 480, color(random(255), random(255), random(255)));
//on fait un tableau des flêches voulues avec la rotation de départ
//                        F0---F1---F2---F3
//                        |               |
//                        F7---F6---F5---F4

Fleche[] fleches = {
  new Fleche(60, 360, 90),
  new Fleche(220, 360, 90),
  new Fleche(360, 360, 90),
  new Fleche(540, 360, 180),
  new Fleche(60, 480, 0),
  new Fleche(220, 480, 270),
  new Fleche(360, 480, 270),
  new Fleche(540, 480, 270)
};
//################################################################################
//                          SETUP  ET  DRAW
//################################################################################
void setup(){
    size(600, 600);
    minim = new Minim(this);//on démarre le moteur et on ajoute les sons
    Do = minim.loadSample("DO.mp3", 512);
    re = minim.loadSample("RE.mp3", 512);
    mi = minim.loadSample("MI.mp3", 512);
    fa = minim.loadSample("FA.mp3", 512);
    sol = minim.loadSample("SOL.mp3", 512);
    la = minim.loadSample("LA.mp3", 512);
    si = minim.loadSample("SI.mp3", 512);
    Do2 = minim.loadSample("DO_Octave.mp3", 512);
    fa_d = minim.loadSample("fa_dièse.mp3", 512);
    sol_d = minim.loadSample("sol_dièse.mp3", 512);
    la_d = minim.loadSample("la_dièse.mp3", 512);
    re_d = minim.loadSample("re_dièse.mp3", 512);
    Do_d = minim.loadSample("Do_dièse.mp3", 512);
}
void draw(){
  background(255);
  stroke(0);
  dessine();
  piano();
  //Dessin des flèches: Pour chaque élément du tableau flêches on la dessine
  for(Fleche fleche : fleches){fleche.display();};
 
  //on dessine les balles aux positions précédemment définies
  balle1.display();
  balle2.display();
  balle3.display();
  balle4.display();
  if(clavier == true){// je fais bouger la balle que si on appuie sur espace
    balle1.mouvement();
    balle2.mouvement();
    balle3.mouvement();
    balle4.mouvement();
  }
  balle1.setSpeed(dx, dy);// on donne un déplacement à balle en x et en y
  balle2.setSpeed(dx2, dy2);
  balle3.setSpeed(dx3, dy3);
  balle4.setSpeed(dx4, dy4);
  son();// méthode jouant les sons de la balle lorsqu'elle passe une flêche
  collision();// methode déplaçant les balles en fonction de la direction des flêches
}
//################################################################################
//                  METHODES DESSIN PIANO
//################################################################################
// fond noir sur la moitié supérieure
void dessine(){
  fill(0);
  rect(0, 0, 600, 300);
}
//piano
void piano(){
  fill(255);
  rect(65,25,55,250);//Do
  rect(125,25,55,250);//re
  rect(185,25,55,250);//mi
  rect(245,25,55,250);//fa
  rect(305,25,55,250);//sol
  rect(365,25,55,250);//la
  rect(425,25,55,250);//si
  rect(485,25,55,250);//DO
  fill(#555555);
  rect(100,25,40,140);//les dièses
  rect(160,25,40,140);
  rect(280,25,40,140);
  rect(340,25,40,140);
  rect(400,25,40,140);
  rect(520,25,20,140);
}
//################################################################################
//        METHODES MOUVEMENT BALLE EN FONCTION DES FLECHES
//################################################################################
void collision(){
  //////
  //Mouvement de la balle en fonction du sens des flêches
  //////pour chaque élément du tableau fleches je regarde si ma balle à 2 pixels prêts est sur la flêche, je regarde le sens de la flêche et j'applique un mouvement (ceci permet de palier au pb de frame qui saute si le calcul est trop long)
  for(Fleche fleche : fleches){
    if((balle1.getX() > fleche.getX() - 2) && (balle1.getX() < fleche.getX() + 2) && (balle1.getY() > fleche.getY() - 2) && (balle1.getY() < fleche.getY() + 2)){
      switch((int)fleche.getRotation()) {// on caste car getRotation est de type float et on fait chaque cas de rotation de 90
        case 0://en haut
          dx = 0;
          dy = -1;
          break;
        
        case 90://à droite
          dx = 1;
          dy = 0;
          break;
          
        case 180://en bas
          dx = 0;
          dy = 1;
          break;
          
        case 270:// à gauche
          dx = -1;
          dy = 0;
          break;
      }
    } // on duplique le code pour les 3 autres balles
    if((balle2.getX() > fleche.getX() - 2) && (balle2.getX() < fleche.getX() + 2) && (balle2.getY() > fleche.getY() - 2) && (balle2.getY() < fleche.getY() + 2)){
      switch((int)fleche.getRotation()) {// on caste car getRotation est de type float et on fait chaque cas de rotation de 90
        case 0://en haut
          dx2 = 0;
          dy2 = -1;
          break;
        
        case 90://à droite
          dx2 = 1;
          dy2 = 0;
          break;
          
        case 180://en bas
          dx2 = 0;
          dy2 = 1;
          break;
          
        case 270:// à gauche
          dx2 = -1;
          dy2 = 0;
          break;
      }
    }
    if((balle3.getX() > fleche.getX() - 2) && (balle3.getX() < fleche.getX() + 2) && (balle3.getY() > fleche.getY() - 2) && (balle3.getY() < fleche.getY() + 2)){
      switch((int)fleche.getRotation()) {// on caste car getRotation est de type float et on fait chaque cas de rotation de 90
        case 0://en haut
          dx3 = 0;
          dy3 = -1;
          break;
        
        case 90://à droite
          dx3 = 1;
          dy3 = 0;
          break;
          
        case 180://en bas
          dx3 = 0;
          dy3 = 1;
          break;
          
        case 270:// à gauche
          dx3 = -1;
          dy3 = 0;
          break;
      }
    }
    if((balle4.getX() > fleche.getX() - 2) && (balle4.getX() < fleche.getX() + 2) && (balle4.getY() > fleche.getY() - 2) && (balle4.getY() < fleche.getY() + 2)){
      switch((int)fleche.getRotation()) {// on caste car getRotation est de type float et on fait chaque cas de rotation de 90
        case 0://en haut
          dx4 = 0;
          dy4 = -1;
          break;
        
        case 90://à droite
          dx4 = 1;
          dy4 = 0;
          break;
          
        case 180://en bas
          dx4 = 0;
          dy4 = 1;
          break;
          
        case 270:// à gauche
          dx4 = -1;
          dy4 = 0;
          break;
      }
    }
  }
}
//////
//action au clic
//pour chaque élément du tableau flêches on évalue la position de la souris dans un carré de 55 pixels autour ( précision du clik)
//et on applique la rotation de la flêche
//////
void mouseClicked(){
  for(Fleche fleche : fleches){
    if((mouseX > fleche.getX() - 55) && (mouseX < fleche.getX() + 55) && (mouseY > fleche.getY() - 55) && (mouseY < fleche.getY() + 55)){
      fleche.setRotation(fleche.getRotation() + 90);
    }  
  }

  //////
  //limite de rotation des flèches du haut
  //////
  if(fleches[0].getRotation() > 180){fleches[0].setRotation(90);};// 90 au départ, donc si on dépasse 180 on réinit à 90. Donc on a une flêche D et une flêche B
  if(fleches[1].getRotation() > 270){fleches[1].setRotation(90);};//on autorise 3 positiosn D,B,G si on reclik et on depasse 270 on met la valeur à 90
  if(fleches[2].getRotation() > 270){fleches[2].setRotation(90);};//...
  if(fleches[3].getRotation() > 270){fleches[3].setRotation(180);};
 
  //////
  //limite de rotation des flèches du bas, même système qu'au dessus
  //////
  if(fleches[4].getRotation() > 90){fleches[4].setRotation(0);};// 0 au départ donc si > 90 on réinit DONC H et G
  if(fleches[5].getRotation() > 90 && fleches[5].getRotation() < 270){fleches[5].setRotation(270);};// si on est entre 90 et 270 on réinit à 270
  if(fleches[5].getRotation() > 270){fleches[5].setRotation(0);}// donc on ne peut avoir que 2 positions H et D
  if(fleches[6].getRotation() > 90 && fleches[6].getRotation() < 270){fleches[6].setRotation(270);};// ...
  if(fleches[6].getRotation() > 270){fleches[6].setRotation(0);};
  if(fleches[7].getRotation() > 0 && fleches[7].getRotation() < 270){fleches[7].setRotation(270);};
  if(fleches[7].getRotation() > 270){fleches[7].setRotation(0);};
}
//################################################################################
//           METHODES SON ET ACTION CLAVIER / SOURIS
//################################################################################
//////
// on joue un son lorsque la balle passe une flêche et on colorie la touche du piano
//////
void son(){
  if(clavier == true){
      if((balle1.getX()==60 && balle1.getY()==360)||(balle2.getX()==60 && balle2.getY()==360)||(balle3.getX()==60 && balle3.getY()==360)||(balle4.getX()==60 && balle4.getY()==360)){
        Do.trigger();
        fill(#FA606A);
        rect(65,25,55,250);
        fill(#555555);
        rect(100,25,40,140);
      }
      if((balle1.getX()==220 && balle1.getY()==360)||(balle2.getX()==220 && balle2.getY()==360)||(balle3.getX()==220 && balle3.getY()==360)||(balle4.getX()==220 && balle4.getY()==360)){
        re.trigger();
        fill(#FA606A);
        rect(125,25,55,250);
        fill(#555555);
        rect(100,25,40,140);
        rect(160,25,40,140);
      }
      if((balle1.getX()==380 && balle1.getY()==360)||(balle2.getX()==380 && balle2.getY()==360)||(balle3.getX()==380 && balle3.getY()==360)||(balle4.getX()==380 && balle4.getY()==360)){
        mi.trigger();
        fill(#FA606A);
        rect(185,25,55,250);
        fill(#555555);
        rect(160,25,40,140);
      }
      if((balle1.getX()==540 && balle1.getY()==360)||(balle2.getX()==540 && balle2.getY()==360)||(balle3.getX()==540 && balle3.getY()==360)||(balle4.getX()==540 && balle4.getY()==360)){
        fa.trigger();
        fill(#FA606A);
        rect(245,25,55,250);
        fill(#555555);
        rect(280,25,40,140);
      }
      if((balle1.getX()==60 && balle1.getY()>=480)||(balle2.getX()==60 && balle2.getY()>=480)||(balle3.getX()==60 && balle3.getY()>=480)||(balle4.getX()==60 && balle4.getY()>=480)){
         Do2.trigger();
         fill(#FA606A);
         rect(485,25,55,250);
         fill(#555555);
         rect(520,25,20,140);
      }
      if((balle1.getX()==220 && balle1.getY()>=480)||(balle2.getX()==220 && balle2.getY()>=480)||(balle3.getX()==220 && balle3.getY()>=480)||(balle4.getX()==220 && balle4.getY()>=480)){
        si.trigger();
        fill(#FA606A);
        rect(425,25,55,250);
        fill(#555555);
        rect(400,25,40,140);
      }
      if((balle1.getX()==380 && balle1.getY()>=480)||(balle2.getX()==380 && balle2.getY()>=480)||(balle3.getX()==380 && balle3.getY()>=480)||(balle4.getX()==380 && balle4.getY()>=480)){
        la.trigger();
        fill(#FA606A);
        rect(365,25,55,250);
        fill(#555555);
        rect(340,25,40,140);
        rect(400,25,40,140);
      }
      if((balle1.getX()==540 && balle1.getY()>=480)||(balle2.getX()==540 && balle2.getY()>=480)||(balle3.getX()==540 && balle3.getY()>=480)||(balle4.getX()==540 && balle4.getY()>=480)){
       sol.trigger();
        fill(#FA606A);
        rect(305,25,55,250);
        fill(#555555);
        rect(280,25,40,140);
        rect(340,25,40,140);
      }
  }
}
//////
//action du clavier : on change la couleur de la touche du piano et on joue un son
////// lettres autorisées (min ou maj): q,s,d,f,j,k,l,m    et   z,e,t,u,i,p
void keyPressed(){
 if (key == 32){//espace
    clavier = true;//sert pour faire avancer les balles
  }
 if (key == 10){//entrée
   clavier = false;//arrête les balles si on veut jouer simplement au piano par exemple
 }
 if(key == 'q' || key =='Q'){
    Do.trigger();
    fill(#FA606A);
    rect(65,25,55,250);
    fill(#555555);
    rect(100,25,40,140);
 }
 if(key == 'z' || key =='Z'){
    Do_d.trigger();
    fill(#52B5F5);
    rect(100,25,40,140);
 }
 if(key == 's' || key =='S'){
    re.trigger();
    fill(#FA606A);
    rect(125,25,55,250);
    fill(#555555);
    rect(100,25,40,140);
    rect(160,25,40,140);
 }
 if(key == 'e' || key =='E'){
    re_d.trigger();
    fill(#52B5F5);
    rect(160,25,40,140);
 }
 
 if(key == 'd' || key =='D'){
    mi.trigger();
    fill(#FA606A);
    rect(185,25,55,250);
    fill(#555555);
    rect(160,25,40,140);
    
 }
 if(key == 'f' || key =='F'){
    fa.trigger();
    fill(#FA606A);
    rect(245,25,55,250);
    fill(#555555);
    rect(280,25,40,140);
 }
 if(key == 't' || key =='T'){
    fa_d.trigger();
    fill(#52B5F5);
    rect(280,25,40,140);
 }
 if(key == 'j' || key =='J'){
    sol.trigger();
    fill(#FA606A);
    rect(305,25,55,250);
    fill(#555555);
    rect(280,25,40,140);
    rect(340,25,40,140);
 }
  if(key == 'u' || key =='U'){
    sol_d.trigger();
    fill(#52B5F5);
    rect(340,25,40,140);
 }
 if(key == 'k' || key =='K'){
    la.trigger();
    fill(#FA606A);
    rect(365,25,55,250);
    fill(#555555);
    rect(340,25,40,140);
    rect(400,25,40,140);
 }
 if(key == 'i' || key =='I'){
    la_d.trigger();
    fill(#52B5F5);
    rect(400,25,40,140);
 }
 if(key == 'l' || key =='L'){
    si.trigger();
    fill(#FA606A);
    rect(425,25,55,250);
    fill(#555555);
    rect(400,25,40,140);
 }
 if(key == 'm' || key =='M'){
     Do2.trigger();
     fill(#FA606A);
     rect(485,25,55,250);
     fill(#555555);
     rect(520,25,20,140);
 }
 if(key == 'p' || key =='P'){
     Do_d.trigger();
     fill(#52B5F5);
     rect(520,25,20,140);
 }
}
//////
//On peut aussi cliquer avec la souris pour jouer de la musique au piano
//////
void mousePressed(){
  if((mouseX>65 && mouseX<120 && mouseY>165 && mouseY<275) || (mouseX>65 && mouseX<100 && mouseY>25 && mouseY<=165) ){
    Do.trigger();
    fill(#FA606A);
    rect(65,25,55,250);
    fill(#555555);
    rect(100,25,40,140);
  }
  if(mouseX>100 && mouseX<140 && mouseY>25 && mouseY<165){
    Do_d.trigger();
    fill(#52B5F5);
    rect(100,25,40,140);
  }
  if((mouseX>125 && mouseX<180 && mouseY>165 && mouseY<275) || (mouseX>140 && mouseX<160 && mouseY>25 && mouseY<=165) ){
    re.trigger();
    fill(#FA606A);
    rect(125,25,55,250);
    fill(#555555);
    rect(100,25,40,140);
    rect(160,25,40,140);
  }
   if(mouseX>160 && mouseX<200 && mouseY>25 && mouseY<165){
    re_d.trigger();
    fill(#52B5F5);
    rect(160,25,40,140);
 }
  if((mouseX>185 && mouseX<240 && mouseY>165 && mouseY<275) || (mouseX>200 && mouseX<240 && mouseY>25 && mouseY<=165) ){
    mi.trigger();
    fill(#FA606A);
    rect(185,25,55,250);
    fill(#555555);
    rect(160,25,40,140);
 }
  if((mouseX>245 && mouseX<300 && mouseY>165 && mouseY<275) || (mouseX>245 && mouseX<280 && mouseY>25 && mouseY<=165) ){
    fa.trigger();
    fill(#FA606A);
    rect(245,25,55,250);
    fill(#555555);
    rect(280,25,40,140);
 }
  if(mouseX>280 && mouseX<320 && mouseY>25 && mouseY<165){
    fa_d.trigger();
    fill(#52B5F5);
    rect(280,25,40,140);
 }
 if((mouseX>305 && mouseX<360 && mouseY>165 && mouseY<275) || (mouseX>320 && mouseX<340 && mouseY>25 && mouseY<=165) ){
    sol.trigger();
    fill(#FA606A);
    rect(305,25,55,250);
    fill(#555555);
    rect(280,25,40,140);
    rect(340,25,40,140);
 }
   if(mouseX>340 && mouseX<380 && mouseY>25 && mouseY<165){
    sol_d.trigger();
    fill(#52B5F5);
    rect(340,25,40,140);
 }
  if((mouseX>365 && mouseX<420 && mouseY>165 && mouseY<275) || (mouseX>380 && mouseX<400 && mouseY>25 && mouseY<=165) ){
    la.trigger();
    fill(#FA606A);
    rect(365,25,55,250);
    fill(#555555);
    rect(340,25,40,140);
    rect(400,25,40,140);
 }
  if(mouseX>400 && mouseX<440 && mouseY>25 && mouseY<165){
    sol_d.trigger();
    fill(#52B5F5);
    rect(400,25,40,140);
 }
  if((mouseX>425 && mouseX<480 && mouseY>165 && mouseY<275) || (mouseX>440 && mouseX<480 && mouseY>25 && mouseY<=165) ){
    si.trigger();
    fill(#FA606A);
    rect(425,25,55,250);
    fill(#555555);
    rect(400,25,40,140);
 }
  if((mouseX>485 && mouseX<540 && mouseY>165 && mouseY<275) || (mouseX>485 && mouseX<520 && mouseY>25 && mouseY<=165) ){
     Do2.trigger();
     fill(#FA606A);
     rect(485,25,55,250);
     fill(#555555);
     rect(520,25,20,140);
 }
  if(mouseX>520 && mouseX<540 && mouseY>25 && mouseY<165){
     Do_d.trigger();
     fill(#52B5F5);
     rect(520,25,20,140);
 }
}

 

 

Classe Balle

class Balle{
  int x, y, dx, dy;
  color couleur;
 
  //////
  //Constructeur
  //////
  Balle(int x, int y, color couleur) {
    this.x = x;
    this.y = y;
    this.couleur = couleur;
  }
 
  //////
  //Fonctions get pour retourner la position en x ou en y da la balle
  //////
  int getX(){
    return x;
  }
 
  int getY(){
    return y;
  }
 
  //////
  //Fonctions déterminant la vitesse de la balle
  //////
  void setSpeed(int dx, int dy){
    this.dx = dx;
    this.dy = dy;
  }
 
  //////
  //Dessin de la balle
  //////
  void display(){
    fill(couleur);
    ellipse(x, y, 40, 40);
  }
 
  //////
  //Mouvement de la balle
  //////
  void mouvement(){
    this.x = x + this.dx;
    this.y = y + this.dy;
  }
}

 

 

Classe Fleche

 

class Fleche{
  int x, y;
  float rotation;
 
  //////
  //Constructeur
  //////
  Fleche(int x, int y, float rotation){
    this.x = x;
    this.y = y;
    this.rotation = rotation;
  }
 
  //////
  //Fonctions get
  //////
  int getX(){
    return x;
  }
 
  int getY(){
    return y;
  }
 
  float getRotation(){
    return rotation;
  }
 
  //////
  //Fonctions Set
  //////
  void setRotation(float rotation){
    this.rotation = rotation;
  }
 
  //////
  //Dessin de la flèche: permet d'appliquer un sens de la flêche grâce à translate/rotate
  //////
  void display(){
    pushMatrix();//on met dans une matrice
    strokeWeight(2);//épaisseur
    translate(x, y);//on translate sur x et y
    rotate(radians(rotation));//on applique la rotation
    line(0, 0, 0, -50);//on dessine la flêche, le corps
    line(0, -50,-10, -40); // une extrémité
    line(0, -50, +10, -40);// puis l'autre
    popMatrix();//on l'enlève de la matrice
  }
}

 

Télécharger

Ajouter un commentaire