#include #include #include "paddle.hpp" #include "ball.hpp" int main() { /* Initialize variables used to instantiate structs*/ const int WIDTH = 600; const int HEIGHT = 480; const int RECT_H = HEIGHT / 3; const int RECT_W = 30; const int CIRC_RAD = 10; /* Initialize window */ raylib::Window window = raylib::Window(WIDTH, HEIGHT, "Pong"); SetTraceLogLevel(LOG_INFO); window.ClearBackground(BLACK); SetTargetFPS(60); SetExitKey(KEY_Q); /* Instantiate Paddle and Ball objects */ Paddle pad1 = Paddle(10, 10, RECT_W, RECT_H); Paddle pad2 = Paddle(window.GetWidth() - RECT_W - 10, 10, RECT_W, RECT_H); Ball ball = Ball(window.GetWidth()/2, window.GetHeight()/2, CIRC_RAD, 3, 3); window.BeginDrawing(); pad1.draw(); pad2.draw(); ball.draw(); /* Main loop */ while (!window.ShouldClose()) { /* Update paddle velocity */ if (IsKeyPressed(KEY_S)) { pad1.velocity.y = 5; /* Set positive (downward) velocity, since (0,0) is top-left */ } if (IsKeyPressed(KEY_W)) { pad1.velocity.y = -5; /* Set negative (upward) velocity */ } if (IsKeyReleased(KEY_S) || IsKeyReleased(KEY_W)) { pad1.velocity.y = 0; } if (IsKeyPressed(KEY_UP)) { pad2.velocity.y = -5; } if (IsKeyPressed(KEY_DOWN)) { pad2.velocity.y = 5; } if (IsKeyReleased(KEY_UP) || IsKeyReleased(KEY_DOWN)) { pad2.velocity.y = 0; } /* Update ball velocity based on collision detection */ if (pad1.getRect().CheckCollision(ball.pos, ball.radius)) { /* Collision with paddle 1 */ ball.vel.x = ball.vel.x * (-1); ball.pos.x = pad1.getRect().x + pad1.getRect().GetWidth() + ball.radius + 1; /* Ensuring that the ball doesn't get stuck inside the paddle */ } if (pad2.getRect().CheckCollision(ball.pos, ball.radius)) { /* Collision with paddle 2 */ ball.vel.x = ball.vel.x * (-1); ball.pos.x = pad2.getRect().x - ball.radius - 1; } if (ball.pos.x + ball.radius >= window.GetWidth()) { /* Collision with right wall */ pad1.incrementPoints(); ball.pos = raylib::Vector2(window.GetWidth() / 2, window.GetHeight() / 2); } if (ball.pos.x - ball.radius <= 0) { /* Collision with left wall */ pad2.incrementPoints(); ball.pos = raylib::Vector2(window.GetWidth() / 2, window.GetHeight() / 2); } if (ball.pos.y - ball.radius <= 0 || ball.pos.y + ball.radius >= window.GetHeight()) { /* Collision with top and bottom wals */ ball.vel.y = ball.vel.y * -1; } /* Draw objects */ window.BeginDrawing(); window.ClearBackground(BLACK); pad1.draw(); pad2.draw(); ball.draw(); window.EndDrawing(); } window.Close(); return 0; }