*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;
}