#include "SDL.h" #include "SDL_image.h" #include #include "pong.h" #include "paddle.h" Paddle_t * CreatePaddle(const char * image) { SDL_Surface * Temp = NULL; Paddle_t * newpaddle; newpaddle = malloc(sizeof(Paddle_t)); Temp = IMG_Load(image); if (!Temp) { fprintf(stderr, "Unable to load image: %s\n", SDL_GetError()); exit (-1); } newpaddle->Score = 0; newpaddle->Surface = SDL_DisplayFormatAlpha(Temp); newpaddle->Paddle.w = newpaddle->Surface->w; newpaddle->Paddle.h = newpaddle->Surface->h; newpaddle->Top.w = newpaddle->Paddle.w; newpaddle->Top.h = 1; newpaddle->Bottom.w = newpaddle->Paddle.w; newpaddle->Bottom.h = 1; SDL_FreeSurface(Temp); return newpaddle; } void DrawPaddle(Paddle_t * Paddle) { SDL_BlitSurface(Paddle->Surface, NULL, SDL_GetVideoSurface(), &Paddle->Paddle); SDL_UpdateRect(SDL_GetVideoSurface(), Paddle->Paddle.x, Paddle->Paddle.y, Paddle->Paddle.w, Paddle->Paddle.h); } void DeletePaddle(Paddle_t * Paddle) { SDL_FreeSurface(Paddle->Surface); free(Paddle); } void MovePaddleUp(Paddle_t * Paddle, SDLKey Key) { if ( Game.keystate[Key] ) { if ( Paddle->Paddle.y != 0 ) { DrawRect(&Paddle->Paddle, black->color); Paddle->Paddle.y -= Game.Speed; if ( Paddle->Paddle.y <= 0 ) { Paddle->Paddle.y = 0; } Paddle->Top.y = Paddle->Paddle.y - 1l; Paddle->Bottom.y = Paddle->Paddle.y + Paddle->Paddle.h + 1; if ( Collide(&Paddle->Top, &Ball->Rect) ) { DrawRect(&Ball->Rect, black->color); Ball->Rect.y = Paddle->Top.y - Ball->Rect.h - 2; if ( Ball->Rect.y <= 0 ) { Paddle->Score++; UpdateScore(P1Score, Paddle->Score); if ( (Left->Score > Game.Score_Limit) && (Left->Score > Right->Score + 1) ) { Game.done = 1; } else { Reset(); } } Ball->yv = -Ball->yv; DrawBall(Ball); } DrawPaddle(Paddle); } } } void MovePaddleDown(Paddle_t * Paddle, SDLKey Key) { if ( Game.keystate[Key] ) { if ( Paddle->Paddle.y != Game.height - Paddle->Paddle.h ) { DrawRect(&Paddle->Paddle, black->color); Paddle->Paddle.y += Game.Speed; if ( Paddle->Paddle.y >= Game.height - Paddle->Paddle.h ) { Paddle->Paddle.y = Game.height - Paddle->Paddle.h; } Paddle->Top.y = Paddle->Paddle.y - 1; Paddle->Bottom.y = Paddle->Paddle.y + Paddle->Paddle.h + 1; if ( Collide(&Paddle->Bottom, &Ball->Rect) ) { DrawRect(&Ball->Rect, black->color); Ball->Rect.y = Paddle->Bottom.y + 2; if ( Ball->Rect.y > Game.height - Ball->Rect.h ) { Paddle->Score++; UpdateScore(P1Score, Paddle->Score); if ( (Left->Score > Game.Score_Limit) && (Left->Score > Right->Score + 1) ) { Game.done = 1; } else { Reset(); } } Ball->yv = -Ball->yv; DrawBall(Ball); } DrawPaddle(Paddle); } } } /* if ( Game.keystate[SDLK_j] ) { if ( Right->Paddle.x > Game.width - 70 ) { DrawRect(&Right->Paddle, black->color); Right->Paddle.x -= 2; Right->Bottom.x -= 2; Right->Top.x -= 2; DrawPaddle(Right); if ( Collide(Ball->Rect, Right->Paddle) ) { Ball->yv = 0; Ball->xv = -Ball->xv; if ( Ball->xv > 0 ) { Ball->xv++; } else if ( Ball->xv < 0 ) { Ball->xv--; } } } } if ( Game.keystate[SDLK_l] ) { if ( Right->Paddle.x + Right->Paddle.w < Game.width ) { DrawRect(&Right->Paddle, black->color); Right->Paddle.x += 2; Right->Bottom.x += 2; Right->Top.x += 2; DrawPaddle(Right); if ( Collide(Ball->Rect, Right->Paddle) ) { Ball->yv = 0; Ball->xv = -Ball->xv; if ( Ball->xv > 0 ) { Ball->xv++; } else if ( Ball->xv < 0 ) { Ball->xv--; } } } } if ( Game.keystate[SDLK_a] ) { if ( Left->Paddle.x > 0 ) { DrawRect(&Left->Paddle, black->color); Left->Paddle.x -= 2; Left->Bottom.x -= 2; Left->Top.x -= 2; DrawPaddle(Left); if ( Collide(Ball->Rect, Left->Paddle) ) { Ball->yv = 0; Ball->xv = -Ball->xv; if ( Ball->xv > 0 ) { Ball->xv++; } else if ( Ball->xv < 0 ) { Ball->xv--; } } } } if ( Game.keystate[SDLK_d] ) { if ( Left->Paddle.x + Left->Paddle.w < 70 ) { DrawRect(&Left->Paddle, black->color); Left->Paddle.x += 2; Left->Bottom.x += 2; Left->Top.x += 2; DrawPaddle(Left); if ( Collide(Ball->Rect, Left->Paddle) ) { Ball->yv = 0; Ball->xv = -Ball->xv; if ( Ball->xv > 0 ) { Ball->xv++; } else if ( Ball->xv < 0 ) { Ball->xv--; } } } }*/