#include <SDL/SDL.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
short sizeVideoMode[] = {640,480};
short sizeSurface[] = {1024,768};
SDL_Surface *screen; //SURFACE PRINCIPAL
SDL_Surface *screen2; //SURFACE SECUNDARIO
/**METODO DE INICIALIZACION SDL Y CREACION PANTALLA PRINCIPAL**/
int init(void){
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) == -1){
printf("Error en SDL_Init: %s\n", SDL_GetError());
return 1;
}
atexit(SDL_Quit);
screen = SDL_SetVideoMode(sizeVideoMode[0],sizeVideoMode[1], 32, SDL_ANYFORMAT | SDL_DOUBLEBUF);
screen2 = SDL_CreateRGBSurface(0,sizeSurface[0],sizeSurface[1],32,0xff000000,0x00ff0000,0x0000ff00,0x000000ff);
if (screen2 == NULL){
printf("Error en SDL_SetVideoMode: %s\n", SDL_GetError());
return 1;
}
SDL_WM_SetCaption("Simulador", NULL);
}
/**METODO QUE CARGARA LOS SPRITES AL MAPA**/
SDL_Surface *cargarSprite(char *Rutaimagen,SDL_Surface *imagen,short COLOR[]){
imagen= SDL_LoadBMP(Rutaimagen);//CARGA UNA IMAGEN
SDL_SetColorKey(imagen,SDL_SRCCOLORKEY,SDL_MapRGB(imagen->format,COLOR[0],COLOR[1],COLOR[2]));
return imagen;
}
/**METODO QUE SE ENCARGA DE SCROLLERAR ENTRE LOS LIMITES DE PANTALLA**/
SDL_Rect scroll(short speed,SDL_Rect vistaCamara,SDL_Rect motion){
//SI LA POS EN X DE MOUSE ES NAYOR A WIDTH DE SURFACE PRINCIPAL
if(motion.x >= sizeSurface[0]-(sizeVideoMode[0]-32)){
motion.x += speed; //SE DESPLAZA A LA DERECHA
vistaCamara.x += speed;//VISTA CAMARA SE DESPLAZA A LA DERECHA
//SI SE SALE DE LA PANTALLA
if(vistaCamara.x >=sizeSurface[0]-sizeVideoMode[0])
vistaCamara.x =sizeSurface[0]-sizeVideoMode[0];//NO AVANZA
}else if(motion.x <= sizeSurface[0]-(sizeVideoMode[0]-32)){
motion.x -= speed;
vistaCamara.x -= speed;
if(vistaCamara.x <=0)
vistaCamara.x =0;
}
if(motion.y >= sizeSurface[1]-(sizeVideoMode[1]-32)){
motion.y += speed;
vistaCamara.y += speed;
if(vistaCamara.y >= sizeSurface[1]-sizeVideoMode[1])
vistaCamara.y = sizeSurface[1]-sizeVideoMode[1];
}else if(motion.y <= sizeSurface[1]-(sizeVideoMode[0]-32)){
motion.y -= speed;
vistaCamara.y -= speed;
if(vistaCamara.y <=0)
vistaCamara.y =0;
}
return vistaCamara;
}
/**MAIN*/
int main (int argc, char * argv []){
short speed = 1;//SE DECLARA UNA VELOCIDAD DE DESPLAZAMIENTO
SDL_Event event;//VARIABLE TIOPO EVENTO
short color [] = {0,0,0};//COLOR TRANSPARENCIA IMAGEN
/**inicializa SDL, crea mapa y da coordenadas aleatorias a las sondas**/
init();
SDL_Rect motion = {0,0};//GUARDARA LAS POSION DEL MOUSE
SDL_Rect vistaCamara = {0,0,sizeVideoMode[0],sizeVideoMode[1]}; //RECTANGULO DEL TAMANO DE LA SURFACE SECUNDARIA
screen2 =cargarSprite("img.bmp",screen2,color);//SE CARGA LA IMAGEN A LA SURFACE SECUNDARIA
while (1){ //BUCLE INFINITO
while (SDL_PollEvent(& event)){//CAPTURA EVENTOS
if (event.type == SDL_QUIT){//SI SE PRESIONO X DE VENTANA
return 0;//SALIR
}
if(event.type == SDL_MOUSEMOTION){//SIEL TIPO ES DE MOVIMIENTO RATOS
motion.x = event.motion.x;//CAPTURAR X DEL MOUSE
motion.y = event.motion.y;//CAPTURAR Y DEL MOUSE
}
}
vistaCamara = scroll(speed,vistaCamara,motion); //REALIZA EL SCROLLIN
SDL_BlitSurface(screen2,&vistaCamara,screen,NULL);//PINTA LA SURFACE SECUNDARIA EN LA PRIMARIA
SDL_Flip(screen);//MUESTRA LA SURFACE PRINCIPAL
SDL_FreeSurface(screen);//LIMPIA LA SURFACE
SDL_Delay(10);//TIEMPO DE RETARDO DE 10 MILISEGUNDOS
}//fin while(true)
SQL_Quit();//DESINIALIZA SDL
return 0;
}