From cb7efa200cd2699f930d991902d0ad652f599e69 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Mon, 20 May 2013 20:41:06 -0400 Subject: Make paddles unstoppable! --- diff --git a/src/game.c b/src/game.c index 83d803c..86b7be6 100644 --- a/src/game.c +++ b/src/game.c @@ -7,6 +7,7 @@ static void draw_paddles(struct game *g); static void wait(struct game *g); static void input(struct game *g); +static void update(struct game *g); static void draw(struct game *g); struct game * @@ -42,6 +43,7 @@ run_game(struct game *g) while (g->running) { wait(g); input(g); + update(g); draw(g); } } @@ -56,8 +58,6 @@ static void input(struct game *g) { int c; - struct paddle *pad; - int dir; timeout(0); for (;;) { @@ -67,34 +67,48 @@ input(struct game *g) } else if (c == ERR) { break; } else if (c == KEY_LEFT) { - pad = &g->players[0]->paddle_h; - dir = -1; - if (pad->pos > pad->size / 2 + 3) { - pad->pos += pad->speed * dir; - } + g->players[0]->paddle_h.dir = -1; } else if (c == KEY_RIGHT) { - pad = &g->players[0]->paddle_h; - dir = 1; - if (pad->pos < 77 - pad->size / 2) { - pad->pos += pad->speed * dir; - } + g->players[0]->paddle_h.dir = 1; } else if (c == KEY_UP) { - pad = &g->players[0]->paddle_v; - dir = -1; - if (pad->pos > pad->size / 2 + 2) { - pad->pos += pad->speed * dir; - } + g->players[0]->paddle_v.dir = -1; } else if (c == KEY_DOWN) { - pad = &g->players[0]->paddle_v; - dir = 1; - if (pad->pos < 23 - pad->size / 2) { - pad->pos += pad->speed * dir; - } + g->players[0]->paddle_v.dir = 1; } } } static void +update(struct game *g) +{ + struct paddle *pad; + + /* Player 1 horizontal paddle */ + pad = &g->players[0]->paddle_h; + pad->pos += pad->speed * pad->dir; + if (pad->pos < pad->size / 2 + 2) pad->pos = pad->size / 2 + 2; + if (pad->pos > 78 - pad->size / 2) pad->pos = 78 - pad->size / 2; + + /* Player 1 vertical paddle */ + pad = &g->players[0]->paddle_v; + pad->pos += pad->speed * pad->dir; + if (pad->pos < pad->size / 2 + 2) pad->pos = pad->size / 2 + 2; + if (pad->pos > 23 - pad->size / 2) pad->pos = 23 - pad->size / 2; + + /* Player 2 horizontal paddle */ + pad = &g->players[1]->paddle_h; + pad->pos += pad->speed * pad->dir; + if (pad->pos < pad->size / 2 + 2) pad->pos = pad->size / 2 + 2; + if (pad->pos > 78 - pad->size / 2) pad->pos = 78 - pad->size / 2; + + /* Player 2 vertical paddle */ + pad = &g->players[1]->paddle_v; + pad->pos += pad->speed * pad->dir; + if (pad->pos < pad->size / 2 + 2) pad->pos = pad->size / 2 + 2; + if (pad->pos > 23 - pad->size / 2) pad->pos = 23 - pad->size / 2; +} + +static void draw(struct game *g) { draw_paddles(g); diff --git a/src/paddle.h b/src/paddle.h index 9b4bdc7..5f7de67 100644 --- a/src/paddle.h +++ b/src/paddle.h @@ -12,6 +12,7 @@ struct paddle { int pos; int size; int speed; + int dir; }; #endif diff --git a/src/player.c b/src/player.c index 58ef6b5..a0cf7bb 100644 --- a/src/player.c +++ b/src/player.c @@ -20,6 +20,8 @@ new_player(void) p->paddle_v.size = PADDLE_V_SIZE_NORMAL; p->paddle_h.speed = PADDLE_H_SPEED_NORMAL; p->paddle_v.speed = PADDLE_V_SPEED_NORMAL; + p->paddle_h.dir = 0; + p->paddle_v.dir = 0; return p; } -- cgit v0.9.1