summaryrefslogtreecommitdiff
path: root/pong
diff options
context:
space:
mode:
authormRnea <akannemre@gmail.com>2024-12-21 16:07:48 +0300
committermRnea <akannemre@gmail.com>2024-12-21 16:07:48 +0300
commit91a0bf8b9bfabf85e7ce110623a3af1ca4559e72 (patch)
treeb0dcf4862ba87f057cc951c4aafe243fe62341d3 /pong
parentfe4c82aaaabdd82c9220c2c538d306a463576a1d (diff)
started pong game
Diffstat (limited to 'pong')
-rw-r--r--pong/Makefile6
-rw-r--r--pong/pong.c112
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;
+}