#include #include #include void dibujar_paleta (SDL_Surface *screen, SDL_Rect rectangulo); void dibujar_bola (SDL_Surface *screen, SDL_Rect bola); void limpiar(SDL_Surface *screen); int main(int argc, char *argv[]) { typedef struct { int x; int y; int dirx; int diry; // int velocidad; } Pelota; SDL_Surface *screen; SDL_Surface *fondo; SDL_Event mievent; if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == -1) { printf("No se ha iniciado SDL"); } screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE); SDL_WM_SetCaption("Pong", NULL); // Ponemos el fondo SDL_Rect imgfondo = {0, 0, 0, 0}; fondo = SDL_LoadBMP("fondo.bmp"); // Bucle del programa. Pelota sbola = {160, 120, 3, 2}; SDL_Rect rectangulo = {20, 10, 20, 50}; int salir = 0; while (salir != 1) { SDL_PollEvent(&mievent); switch (mievent.type) { case SDL_QUIT: salir = 1; break; case SDL_KEYDOWN: // Movemos nuestro cuadrito if (mievent.key.keysym.sym == SDLK_UP) { SDL_WM_SetCaption("Tecla pulsada: Arriba", NULL); if (rectangulo.y > 1) rectangulo.y -= 2; } else if (mievent.key.keysym.sym == SDLK_DOWN) { SDL_WM_SetCaption("Tecla pulsada: Abajo", NULL); if ((rectangulo.y + rectangulo.h) < 239) rectangulo.y += 2; } break; } // Movimiento de la bola // | - Comprobaciones de choque con paredes if ((sbola.y) <= 0) sbola.diry = -sbola.diry; if ((sbola.x + 15) >= 320) sbola.dirx = -sbola.dirx; if ((sbola.y + 15) >= 240) sbola.diry = -sbola.diry; // | - Comprobaciones de chocque con paleta if (sbola.x <= (rectangulo.x + 20) && (sbola.y + 15) < (rectangulo.y + 50) && sbola.y > rectangulo.y) sbola.dirx = -sbola.dirx; // | - Comprobar si ha perdido if ((sbola.x) <= 0) { break; } sbola.x += sbola.dirx; sbola.y += sbola.diry; SDL_Rect bola = {sbola.x, sbola.y, 15, 15}; // Limpiamos pantalla y creamos los elementos limpiar(screen); SDL_BlitSurface(fondo, NULL, screen, &imgfondo); dibujar_paleta(screen, rectangulo); dibujar_bola(screen, bola); SDL_UpdateRect(screen, 0, 0, 320, 240); SDL_Delay(5); } if (salir == 1) { SDL_Quit(); return 0; } else { limpiar(screen); SDL_Surface *fin; fin = SDL_LoadBMP("fin.bmp"); SDL_Rect rect = {0,0,0,0}; SDL_BlitSurface(fin, NULL, screen, &rect); SDL_UpdateRect(screen, 0, 0, 320, 240); SDL_Delay(500); } SDL_Delay(500); } void dibujar_bola(SDL_Surface *screen, SDL_Rect bola) { // Creamos la pelotilla Uint32 color = SDL_MapRGB(screen->format, 0, 0, 0); SDL_FillRect(screen, &bola, color); } void dibujar_paleta(SDL_Surface *screen, SDL_Rect rectangulo) { // Creamos el cuadrito que vamos a mover Uint32 color = SDL_MapRGB(screen->format, 0, 0, 200); SDL_FillRect(screen, &rectangulo, color); } void limpiar(SDL_Surface *screen) { Uint32 c = SDL_MapRGB(screen->format, 200, 200, 200); SDL_FillRect(screen, NULL, c); }