/* intersection entre deux carrs (cc) Douglas Edric Stanley 2006 Ce programme dtecte d'abord une intersection entre deux carrs en utilisant une mthode que nous avons invent : testerIntersection(rect1, rect2); Cette mthode donne comme resultat (return) une valeur boolenne, c'est--dire vrai/faux. Autrement dit: on lui pose une question et elle nous rpond oui ou non . Si nous deux rectangles sont effectivement en intersection, on dessine les rectangles de cette intersection en utilisant les fonctions min() et max() de Processing. */ // quels seront les largeurs & hauteurs de nos deux rectangles? float w = 40, h = 40; // les variables pour le rectangle automatique float auto_gauche = 107; float auto_haut = 107; float auto_droite = auto_gauche + 40; float auto_bas = auto_haut + 40; // ses variables de dplacement float auto_dir_x = 0.3, auto_dir_y = 0.35; // les variables pour le rectangle du joueur float joueur_gauche = -1; float joueur_haut = -1; float joueur_droite = -1; float joueur_bas = -1; // dbut void setup() { size(256,256); noStroke(); } // boucle principale void draw() { //fond blanc chaque cycle background(255); /* rectangle automatique */ // avancer le rectangle automatique auto_gauche += auto_dir_x; auto_haut += auto_dir_y; auto_droite = auto_gauche + w; auto_bas = auto_haut + h; // sauter de l'autre ct si on dpass l'cran if (auto_gauche > 256) auto_gauche -= (256+w); if (auto_gauche < -w ) auto_gauche += (256+w); if (auto_haut > 256) auto_haut -= (256+h); if (auto_haut < -h ) auto_haut += (256+h); // dessiner le rectangle automatique fill(128,128,128); rect(auto_gauche, auto_haut, w, h); /* rectangle du joueur */ // dessiner le rectangle du joueur joueur_gauche = mouseX - (w/2); joueur_haut = mouseY - (h/2); joueur_droite = joueur_gauche + w; joueur_bas = joueur_haut + h; fill(128,128,128); rect(joueur_gauche, joueur_haut, w, h); /* rectangle en intersection */ // crer des variable multiples (listes) contenant tous le points float[] rect_auto = { auto_gauche, auto_haut, auto_droite, auto_bas }; float[] rect_joueur = { joueur_gauche, joueur_haut, joueur_droite, joueur_bas }; // tester si les deux rectangles sont en intersection if ( testerIntersection(rect_auto, rect_joueur) ) { // crer une nouvelle rectangle partir des deux premiers float left = max(auto_gauche, joueur_gauche); float top = max(auto_haut, joueur_haut); float right = min(auto_droite, joueur_droite); float bottom = min(auto_bas, joueur_bas); fill(255,0,255,255); rect(left, top, right-left, bottom-top); } } // donner en retour (return) un rsultat boolean : vrai (true) ou faux (false) boolean testerIntersection(float[] rect_1, float[] rect_2) { // si n'importe laquelle des ces conditions est vrai (|| veut dire ou) // alors nous ne pouvons *pas* avoir une intersection et donc on rend faux // c'est plus rapide (et plus court) de poser la question de cette mannire if ( rect_2[0] > rect_1[2] || rect_2[2] < rect_1[0] || rect_2[1] > rect_1[3] || rect_2[3] < rect_1[1] ) { return(false); } else { return(true); } }