/* teste une collision entre 2 sprites struct sprite * sprite1 : pointeur sur la structure du sprite numero 1 struct sprite * sprite2 : pointeur sur la structure du sprite numero 2 int type : type de collision 0:collision simple 1:renvois la zone entre 1 et 9 ou le sprite 2 touche le sprite 1 1 2 3 4 5 6 0 7 8 9 */ short test_collision(struct sprite * sprite1, struct sprite * sprite2, int type) { // colision par zone simple int collision = 0; if((sprite1->pos_y + sprite1->size_y) >= sprite2->pos_y) if(sprite1->pos_y <= (sprite2->pos_y + sprite2->size_y)) if((sprite1->pos_x + sprite1->size_x) >= sprite2->pos_x) if(sprite1->pos_x <= (sprite2->pos_x + sprite2->size_x)) collision = 1; // les deux sprites s'entrecroisent if(!type || !collision) return collision; // colision par zone, renvoi le mur de 1 à 9 int x1 = sprite1->pos_x; int y1 = sprite1->pos_y; int x2 = x1 + sprite1->size_x; int y2 = y1 + sprite1->size_y; int xx1 = sprite2->pos_x; int yy1 = sprite2->pos_y; int xx2 = xx1 + sprite2->size_x; int yy2 = yy1 + sprite2->size_y; int x=0,y=0; // calcul de la position y du sprite 1 par rapport au 2 en collision if(y1 < yy1) y=0; else { if(y2 > yy2) y=2 ; else y=1; } // calcul de la position x du sprite 1 par rapport au 2 en collision if(x1 < xx1) x=0; else { if(x2 > xx2) x=2 ; else x=1; } return((y*3)+(x+1)); }