Sigo sin entender muy bien ya que me parece que mezclas la inicialización de tu mapa de tiles con la 'rederización'.
A ver si te sirve esto:
Código:
int mapa_ancho = 20;
int mapa_alto = 15;
int resident_map[15][20] {array mapa};
Tiles miMapa[15][20];
void InitMapa(Tiles *map, int *mappyMap)
{
Tiles *mapTile;
int tile;
for(i=0; i<mapa_alto; i++)
for(j=0; j<mapa_ancho; j++)
{
// De mappy a C
tile = mappyMap[i * mapa_ancho + j] - 1;
// Recuperamos la direccion del tile en el mapa
mapTile = &map[i * mapa_ancho + j];
// Inicializamos los miembros del tile
mapTile->imagen = tTiles[tile].imagen;
mapTile->x = i * TILESIZE;
mapTile->y = j * TILESIZE;
}
}
void RenderizaMapa(Tiles *map, SDL_Surface *salida)
{
SDL_Rect dest;
Tiles *mapTile;
for(i=0; i<mapa_alto; i++){
for(j=0; j<mapa_ancho; j++){
mapTile = &map[i * mapa_ancho + j];
dest.x = mapTile->x;
dest.y = mapTile->y;
SDL_BlitSurface(mapTile->imagen, NULL, salida, &dest);
}
}
}
// Solo una vez
InitMapa(miMapa, resident_map);
// A cada frame
RenderizarMapa(miMapa, salida);
Puede que haya algun error en el cálculo i * mapa_ancho + j y que haya que invertir ancho por alto o i por j.
Por cierto, cambia el nombre de tu estructura Tiles por Tile, ya que presta a confusión ya que en ella solo hay un tile a la vez.
Marcadores