Une balle sensible à la souris

Un code improvisé au cours, commenté pour s’y retrouver. Une balle parcours la fenêtre, rencontrer la souris lui fait changer de direction, plus le choc est violent, plus le ricochet est fort.

Précédent | 6/27 | Suivant

Note : ce code peut être allégé par l’emploi de la fonction dist(), qui permet de connaitre la distance entre deux points, et les variables réservées pmouseX et pmouseY qui permettent de conservent les coordonnées en x et y de la souris lors du frame précédent...

// Un code de démo de processing
// Stéphane, septembre 09

// position en x et y de la balle
float bx,by;

// vitesse de la balle sur l'axe x et y
float vx=2,vy=3;

// stocker la position precedente de la souris
int ancien_x=0,ancien_y=0;

// attendre que la souris aie quitté la balle
int attend=0;


void setup(){
 size(700,600);
 // position de départ alétoire de la balle
 bx=random(width);
 by=random(height);
 // vitesse aléatoire de la balle
 vx=random(6)+1;
 vy=random(6)+1;

 noStroke();
 background(0);
}

void draw(){
 // déplacer la balle en fonction de sa vitesse
 bx=bx + vx;
 by=by + vy;

 // la balle ricoche si elle atteind les bords
 if(bx>width || bx<0){
   vx=-vx;
 }
 if(by>height || by<0){
   vy=-vy;
 }

 // est-ce que la souris est sur la balle ?
 if(abs(mouseX-bx)<15 && abs(mouseY-by)<15){
   // est-ce que la souris n'était pas déjà dans la zone d'influence ?
   // sinon oui ne rien faire
   if(attend==0){
     vx=(ancien_x-mouseX)+0.5;
     vy=(ancien_y-mouseY)+0.5;
     vy=-vy;
     vx=-vx;
     // securite : attendre que la souris aie quitte
     // la zone d'influence
     attend=1;
   }
 }
 else {
   // la boule quitte la zone d'influence, la souris peut être de nouveau active
   attend=0;
 }


 // dessiner la balle avec une couleur différente chaque fois
 fill(random(255),random(255),random(255));
 ellipse(bx,by,50,50);

 // stocker cette position pour le prochain frame
 ancien_x=mouseX;
 ancien_y=mouseY;

}