summaryrefslogtreecommitdiff
path: root/paddle.c
diff options
context:
space:
mode:
Diffstat (limited to 'paddle.c')
-rw-r--r--paddle.c170
1 files changed, 170 insertions, 0 deletions
diff --git a/paddle.c b/paddle.c
new file mode 100644
index 0000000..081678b
--- /dev/null
+++ b/paddle.c
@@ -0,0 +1,170 @@
+#include "SDL.h"
+#include "SDL_image.h"
+#include <stdlib.h>
+#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--;
+ }
+ }
+ }
+ }*/
+