toute image que tu affiches à l'écran possède une position et une largeur/hauteur donc tu peux faire un SDL_Rect avec.
si tu ne veux compter que les éléments différents de 0 y a une solution.
tu commences par compter le nombres d'éléments différents de 0.
int x = 0;
int y = 0;
int nb_element_different_de_zero = 0;
for(x = 0; x < LARGEUR_MAP;x++)
for(y = 0; y < HAUTEUR_MAP;y++)
if(tableau[x][y] != 0)
nb_element_different_de_zero++;
ensuite tu alloues un tableau des éléments différents de 0.
SDL_Rect * TabElementsCollisionnel;
TabElementsCollisionnel =
malloc(sizeof(SDL_Rect)*nb_element_different_de_ze
ro);
int var = 0;
for(x = 0; x < LARGEUR_MAP;x++)
for(y = 0; y < HAUTEUR_MAP;y++)
if(tableau[x][y] != 0)
{
TabElementsCollisionnel[var] =
SDL_Rect(x*LARGEUR_D_UN_TILE,y*HAUTEUR_D_UN_TILE,L
ARGEUR_D_UN_TILE,HAUTEUR_D_UN_TILE);
var++;
}
et ainsi tu as un tableau avec les SDL_Rect des éléments collisionnel (enfin différents de 0, là tu peux améliorer en ajoutant && != 3 si 3 n'est pas collisionnel etc)
à partir de là le gros du boulot est fait.
maintenant il reste plus qu'à détecter les collisions à partie de ça.
On a normalement un SDL_Rect pour le héros à la base. que je vais appeler Heros ^^
int i = 0;
for(i = 0; i < nb_element_different_de_zero;i++)
if(Heros.x + Heros.w > TabElementsCollisionnel[i].x)
if(Heros.x < TabElementsCollisionnel[i].x +TabElementsCollisionnel[i].w )
if(Heros.y + Heros.h > TabElementsCollisionnel[i].y)
if(Heros.y < TabElementsCollisionnel[i].y +TabElementsCollisionnel[i].h )
//alors on a une collision.