*NOTA:no utilizo POO por que me enredo anunque si se utilizarla
 
 - Código: Seleccionar todo
 #include <SDL.h>
 #include <SDL_image.h>
 SDL_Surface *PANTALLA = NULL;
 SDL_Surface *OJAG = NULL;
 SDL_Surface *TERRENO = NULL;
 SDL_Rect MURO;
 SDL_Rect OJAG_R;
 SDL_Rect TERRENO_R;
 SDL_Rect CAMARA;
 SDL_Event EVENTO;
 int vel = 3;
 int VELX, VELY;
 bool FIN = false;
 /*******************************************/
 bool COLISION( SDL_Rect A, SDL_Rect B )
 {
 //LOS LADOS DE LOS RECTANGULOS
 int leftA, leftB;
 int rightA, rightB;
 int topA, topB;
 int bottomA, bottomB;
 //CALCULAR LOS LADOS DE LA RECTA A
 leftA = A.x;
 rightA = A.x + A.w;
 topA = A.y;
 bottomA = A.y + A.h;
 //CALCULAR LOS LADOS DE LA RECTA B
 leftB = B.x;
 rightB = B.x + B.w;
 topB = B.y;
 bottomB = B.y + B.h;
 //SI ALGUNO DE LOS LADOS DESDE A ESTAN FUERA DE B
 if( bottomA <= topB ){ return false; }
 if( topA >= bottomB ){ return false; }
 if( rightA <= leftB ){ return false; }
 if( leftA >= rightB ){ return false; }
 //SI NINGUNO DE LOS LADOS DESDE A ESTAN FUERA DE B
 return true;
 }
 /***************************************/
 int main( int argc, char* args[] ){
 SDL_Init(SDL_INIT_EVERYTHING);
 PANTALLA = SDL_SetVideoMode(800,600,24,SDL_SWSURFACE);
 OJAG = SDL_LoadBMP("pj_1.bmp");
 TERRENO = SDL_LoadBMP("terreno.bmp");
 
 OJAG_R.x = 0;
 OJAG_R.y = 0;
 OJAG_R.w = OJAG->w;
 OJAG_R.h = OJAG->h;
 TERRENO_R.x = 0;
 TERRENO_R.y = 0;
 TERRENO_R.w = TERRENO->w;
 TERRENO_R.h = TERRENO->h;
 MURO.x = 90;
 MURO.y = 300;
 MURO.w = 400;
 MURO.h = 30;
 CAMARA.x = 0;
 CAMARA.y = 0;
 CAMARA.w = 800;
 CAMARA.h = 600;
 while( FIN == false )
 {
 
 
 while( SDL_PollEvent( &EVENTO ) )
 {
 
 if( EVENTO.type == SDL_QUIT ){ FIN = true; }
 
 if( EVENTO.type == SDL_KEYDOWN )
 {
 switch( EVENTO.key.keysym.sym )
 {
 case SDLK_UP: VELY -= vel; break;
 case SDLK_DOWN: VELY += vel; break;
 case SDLK_LEFT: VELX -= vel; break;
 case SDLK_RIGHT: VELX += vel; break;
 
 
 }
 
 }
 else if( EVENTO.type == SDL_KEYUP )
 {
 
 switch( EVENTO.key.keysym.sym )
 {
 case SDLK_UP: VELY += vel; break;
 case SDLK_DOWN: VELY -= vel; break;
 case SDLK_LEFT: VELX += vel; break;
 case SDLK_RIGHT: VELX -= vel; break;
 }
 }
 if(EVENTO.key.keysym.sym == SDLK_ESCAPE){ FIN =1; }
 
 
 }
 OJAG_R.x+= VELX;
 OJAG_R.y+= VELY;
 if(OJAG_R.x<=0){OJAG_R.x=0;}
 if(OJAG_R.y<=0){OJAG_R.y=0;}
 if(OJAG_R.x+90>=800){OJAG_R.x-= VELX;}
 if(OJAG_R.y+115>=600){OJAG_R.y-= VELY;}
 CAMARA.x = ( OJAG_R.x + 90 /2 ) - 800 /2;
 CAMARA.y = ( OJAG_R.y + 115 /2 ) - 600 /2;
 if( CAMARA.x < 0 ){ CAMARA.x = 0; }
 if( CAMARA.y < 0 ){ CAMARA.y = 0; }
 if( CAMARA.x > 3000 - CAMARA.w ){ CAMARA.x = 3000 - CAMARA.w; }
 if( CAMARA.y > 3000 - CAMARA.h ){CAMARA.y = 3000 - CAMARA.h; }
 
 if( COLISION( OJAG_R,MURO) ){ OJAG_R.x -= VELX; }
 if( COLISION( OJAG_R,MURO) ){ OJAG_R.y -= VELY; }
 
 //SDL_FillRect( PANTALLA, &PANTALLA->clip_rect, SDL_MapRGB( PANTALLA->format, 0xFF, 0xFF, 0xFF ) );
 SDL_BlitSurface(TERRENO, NULL, PANTALLA, &CAMARA);
 SDL_FillRect( PANTALLA, &MURO, SDL_MapRGB( PANTALLA->format, 0x77, 0x77, 0x77 ) );
 SDL_BlitSurface(OJAG, NULL, PANTALLA, &OJAG_R);
 
 SDL_Flip( PANTALLA );
 
 
 }
 SDL_FreeSurface(TERRENO);
 SDL_FreeSurface(OJAG);
 SDL_Quit();
 return 0;
 }


