summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2013-05-20 20:41:06 (EDT)
committer P. J. McDermott <pjm@nac.net>2013-05-20 20:41:06 (EDT)
commitcb7efa200cd2699f930d991902d0ad652f599e69 (patch)
treec5a308feba3f71b90011b5826ec00e8901ce84f6
parent08324bf49ea539c52d663648048fb0cdacc7c7a9 (diff)
downloadcursespong-cb7efa200cd2699f930d991902d0ad652f599e69.zip
cursespong-cb7efa200cd2699f930d991902d0ad652f599e69.tar.gz
cursespong-cb7efa200cd2699f930d991902d0ad652f599e69.tar.bz2
Make paddles unstoppable!
-rw-r--r--src/game.c58
-rw-r--r--src/paddle.h1
-rw-r--r--src/player.c2
3 files changed, 39 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);
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;
}