summaryrefslogtreecommitdiff
path: root/paddle.c
blob: 081678b4b36d2dd80ac55cbccef6c4b86f79a768 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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--;
						}
					}
				}
			}*/