Implement y-velocity, and added other minor changes
This commit is contained in:
		
							
								
								
									
										50
									
								
								pong.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								pong.c
									
									
									
									
									
								
							| @@ -1,9 +1,11 @@ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <allegro5/allegro.h> | ||||
| #include <allegro5/allegro_font.h> | ||||
| #include <allegro5/allegro_ttf.h> | ||||
| #include <allegro5/allegro_image.h> | ||||
| #include <allegro5/allegro_primitives.h> | ||||
| #include <math.h> | ||||
|  | ||||
| #define WIN_WIDTH 1000 | ||||
| #define WIN_HEIGHT 600 | ||||
| @@ -32,7 +34,8 @@ int main(int argc, char** argv) { | ||||
| 	ALLEGRO_COLOR black = al_map_rgba(0,0,0,255); | ||||
| 	ALLEGRO_COLOR white = al_map_rgba(255,255,255,255); | ||||
| 	ALLEGRO_EVENT event; | ||||
| 	bool running = true; | ||||
| 	bool running = false; | ||||
| 	srand(time(NULL)); // Seed for RNG | ||||
|  | ||||
| 	float width = 25;  // Width and height of paddles | ||||
| 	float height = 150; | ||||
| @@ -43,11 +46,14 @@ int main(int argc, char** argv) { | ||||
| 	float velocity_1 = 0;  // Vertical velocity of first paddle | ||||
| 	float velocity_2 = 0;  // Vertical velocity of second paddle | ||||
|  | ||||
| 	float circ_x = WIN_WIDTH / 2; // Center coordinates of ball | ||||
| 	float circ_y = WIN_HEIGHT / 2; | ||||
| 	float circ_rad = 10;  // Radius of ball | ||||
| 	float circ_vel_x = 5; // Horizontal velocity of ball | ||||
| 	float circ_vel_y = 0; // Vertical velocity of ball | ||||
| 	float circ_x = 25; // Center coordinates of ball | ||||
| 	float circ_y = 25; | ||||
| 	float circ_rad = 15;  // Radius of ball | ||||
| 	float ball_speed = sqrt(72); // Pythagorean distance travelled by ball in one main-loop iteration | ||||
| 	float circ_vel_x = (float)(rand())/(float)(RAND_MAX / 3) + 4.0; // Horizontal velocity of ball (Randomly generated, 4 to 7) - borrowed from https://stackoverflow.com/a/13409133 | ||||
| 	printf("%f\n",circ_vel_x); | ||||
| 	float circ_vel_y = sqrt(pow(ball_speed,2) - pow(circ_vel_x,2)); // Vertical velocity of ball - Subtract X velocity from hypotenuse / ball_speed | ||||
| 	printf("%f\n",circ_vel_y); | ||||
|  | ||||
| 	al_clear_to_color(black); | ||||
| 	al_draw_filled_rectangle(start_x_1, start_y_1, start_x_1 + width, start_y_1 + height, white); | ||||
| @@ -55,6 +61,12 @@ int main(int argc, char** argv) { | ||||
| 	al_draw_filled_circle(circ_x, circ_y, circ_rad, white); | ||||
| 	al_flip_display(); | ||||
|  | ||||
| 	do { | ||||
| 		al_wait_for_event(queue, &event); | ||||
| 	} while (!(event.type == ALLEGRO_EVENT_KEY_DOWN && event.keyboard.keycode == ALLEGRO_KEY_SPACE)); | ||||
|  | ||||
| 	running = true; | ||||
|  | ||||
| 	while (running) { | ||||
| 		// Code borrowed from: https://stackoverflow.com/a/30078011 | ||||
|  | ||||
| @@ -68,7 +80,7 @@ int main(int argc, char** argv) { | ||||
| 						break; | ||||
| 					case ALLEGRO_KEY_S: | ||||
| 						velocity_1 += 5; | ||||
| 						break;  | ||||
| 						break; | ||||
| 					case ALLEGRO_KEY_UP: | ||||
| 						velocity_2 -= 5; | ||||
| 						break; | ||||
| @@ -107,12 +119,6 @@ int main(int argc, char** argv) { | ||||
| 		((velocity_2 < 0 && start_y_2  > 0) || (velocity_2 > 0 && start_y_2 + height < WIN_HEIGHT)) && (start_y_2 += velocity_2); | ||||
| 		circ_x += circ_vel_x; | ||||
| 		circ_y += circ_vel_y; | ||||
| 		 | ||||
| 		//Redraw shapes | ||||
| 		al_draw_filled_rectangle(start_x_1, start_y_1, start_x_1 + width, start_y_1 + height + velocity_1, white);		 | ||||
| 		al_draw_filled_rectangle(start_x_2, start_y_2, start_x_2 + width, start_y_2 + height + velocity_2, white);		 | ||||
| 		al_draw_filled_circle(circ_x, circ_y, circ_rad, white); | ||||
| 		al_flip_display(); | ||||
|  | ||||
| 		if (circ_x + circ_rad >= WIN_WIDTH - 10 - width) { // FOR PADDLE 2: If the circle has reached the point where the paddle would be... | ||||
| 			if (circ_y > start_y_2 && circ_y < start_y_2 + height) { // If the circle is touching the paddle... | ||||
| @@ -120,15 +126,27 @@ int main(int argc, char** argv) { | ||||
| 			} | ||||
| 		} else if (circ_x - circ_rad <= 10 + width) { // FOR PADDLE 1 | ||||
| 			if (circ_y > start_y_1 && circ_y < start_y_1 + height) { | ||||
| 				circ_vel_x =- circ_vel_x; | ||||
| 				circ_vel_x = -circ_vel_x; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if ((circ_y + circ_rad >= WIN_HEIGHT) || (circ_y - circ_rad <= 0)) { | ||||
| 			circ_vel_y = -circ_vel_y; | ||||
| 		} | ||||
|  | ||||
|  | ||||
|  | ||||
| 		//Redraw shapes | ||||
| 		al_draw_filled_rectangle(start_x_1, start_y_1, start_x_1 + width, start_y_1 + height + velocity_1, white); | ||||
| 		al_draw_filled_rectangle(start_x_2, start_y_2, start_x_2 + width, start_y_2 + height + velocity_2, white); | ||||
| 		al_draw_filled_circle(circ_x, circ_y, circ_rad, white); | ||||
| 		al_flip_display(); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| //	Clean up | ||||
| 	al_destroy_display(disp); | ||||
| 	al_destroy_event_queue(queue);	 | ||||
| 	 | ||||
| 	al_destroy_event_queue(queue); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user