diff options
author | mRnea <akannemre@gmail.com> | 2024-12-21 16:07:48 +0300 |
---|---|---|
committer | mRnea <akannemre@gmail.com> | 2024-12-21 16:07:48 +0300 |
commit | 91a0bf8b9bfabf85e7ce110623a3af1ca4559e72 (patch) | |
tree | b0dcf4862ba87f057cc951c4aafe243fe62341d3 | |
parent | fe4c82aaaabdd82c9220c2c538d306a463576a1d (diff) |
started pong game
-rw-r--r-- | pong/Makefile | 6 | ||||
-rw-r--r-- | pong/pong.c | 112 |
2 files changed, 118 insertions, 0 deletions
diff --git a/pong/Makefile b/pong/Makefile new file mode 100644 index 0000000..c2ed0ec --- /dev/null +++ b/pong/Makefile @@ -0,0 +1,6 @@ +SRC := ../util.c pong.c +OUT := ../bin/pong +LIBS := -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 + +make all: + gcc $(SRC) -o $(OUT) $(LIBS) diff --git a/pong/pong.c b/pong/pong.c new file mode 100644 index 0000000..a4a0254 --- /dev/null +++ b/pong/pong.c @@ -0,0 +1,112 @@ +#include <raylib.h> + +const int screenWidth = 800; +const int screenHeight = 450; + +enum control_keys { + MOVE_UP, + MOVE_DOWN, + BOOST +} control_key; + +typedef struct player { + float x; + float y; + int width; + int height; + int velocity; + int controls[3]; +} Player; +int init_vel = 300; + +void move_player(Player* p){ + if (IsKeyDown(p->controls[MOVE_DOWN])){ + p->y += p->velocity * GetFrameTime(); + if (p->y > screenHeight){ + p->y = -p->height; + } + } else if (IsKeyDown(p->controls[MOVE_UP])){ + p->y -= p->velocity * GetFrameTime(); + if (p->y < -p->height){ + p->y = screenHeight; + } + } +} + +void apply_boost(Player* p){ + if (IsKeyPressed(p->controls[BOOST])){ + p->velocity *= 2; + } + else if (IsKeyUp(p->controls[BOOST])){ + p->velocity = init_vel; + } + +} + +void draw_player(Player* p){ + DrawRectangle(p->x, p->y, p->width, p->height, BLACK); +} + + +typedef struct ball { + float x; + float y; + float r; + int vel_x; + int vel_y; + Player* target; +} Ball; + +void move_ball(Ball *b){ + b->y += b->vel_y * GetFrameTime(); + if (b->y < b->r || b->y > screenHeight - b->r) { + b->vel_y *= -1; + b->y += b->vel_y * GetFrameTime(); + } + b->x += b->vel_x * GetFrameTime(); + if (b->x < b->r || b->x > screenWidth - b->r) { + b->vel_x *= -1; + b->x += b->vel_x * GetFrameTime(); + } + /* if (p->x > p->target->){ */ + + /* } */ +} + +void draw_ball(Ball* b){ + DrawCircle(b->x, b->y, b->r, BLACK); +} + +int main(void){ + InitWindow(screenWidth, screenHeight, "Pong"); + Player p[2] = + {{ .x = 30, .y = 30, .width = 10, .height = 60, .velocity = init_vel, + .controls = {KEY_W, KEY_S, KEY_LEFT_SHIFT}}, + { .x = screenWidth - 30, .width = 10, .height = 60, .velocity = init_vel, + .controls = {KEY_UP, KEY_DOWN, KEY_RIGHT_SHIFT}}}; + Ball ball = { .x = screenWidth / 2, .y = screenHeight / 2, .r = 10, + .vel_x = 300, .vel_y = 300}; + + while (!WindowShouldClose()){ + + apply_boost(&p[0]); + apply_boost(&p[1]); + + move_player(&p[0]); + move_player(&p[1]); + + move_ball(&ball); + + BeginDrawing(); + + ClearBackground(WHITE); + DrawText("Hello world!", screenWidth/2, screenHeight/2, 20, BLACK); + + draw_player(&p[0]); + draw_player(&p[1]); + draw_ball(&ball); + + EndDrawing(); + } + return 0; +} |