This one is a case of the evil array.
Here's what you've got now:
void Tile::show(SDL_Rect *pCamera, SDL_Surface *pScreen, SDL_Surface *pTileSheet, SDL_Rect pClips[]){ if( check_collision(pCamera, &box) == true ) { SDL_Rect offset; //Get offsets offset.x = box.x - pCamera->x; offset.y = box.y - pCamera->y; SDL_BlitSurface(pTileSheet, pClips, pScreen, &offset ); }}
pClips is an array of SDL_Rects. When you pass in pClips, the base pointer of the array, you get the first element. That first element happens to be a green tile in your case. Every tile, no matter its type, will show up as a green tile. We need to get to the appropriate place in the array, and then take a pointer to THAT element::
SDL_BlitSurface(pTileSheet, pClips, &pScreen[type], &offset );
If I put my 2 cents in and get a penny for my thoughts, where does my other penny go?