summaryrefslogtreecommitdiffstats
path: root/src/game.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.c')
-rw-r--r--src/game.c58
1 files changed, 36 insertions, 22 deletions
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);