summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2013-05-23 12:33:59 (EDT)
committer P. J. McDermott <pjm@nac.net>2013-05-23 12:33:59 (EDT)
commit7914bae789029ca775ebb182831746e1d60dedc3 (patch)
tree394f6f82cce0763e01ec13c92f311fec9620882b
parenta4d2b83d29a78d171deb2c6447369d94e752f2cb (diff)
downloadcursespong-7914bae789029ca775ebb182831746e1d60dedc3.zip
cursespong-7914bae789029ca775ebb182831746e1d60dedc3.tar.gz
cursespong-7914bae789029ca775ebb182831746e1d60dedc3.tar.bz2
Generalize paddle struct and code.
-rw-r--r--src/paddle.c60
-rw-r--r--src/paddle.h12
-rw-r--r--src/player.c38
3 files changed, 57 insertions, 53 deletions
diff --git a/src/paddle.c b/src/paddle.c
index 0028892..1492ede 100644
--- a/src/paddle.c
+++ b/src/paddle.c
@@ -6,37 +6,29 @@
void
update_paddle(struct paddle *pad)
{
- int min;
- int max;
-
- pad->pos += pad->speed * pad->dir;
- if (pad->type == PADDLE_TYPE_H) {
- min = 3;
- max = BOARD_WIDTH - 2;
- } else {
- min = 2;
- max = BOARD_HEIGHT - 2;
+ *pad->pos += pad->speed * pad->dir;
+ if (*pad->pos < pad->min_pos + *pad->size / 2) {
+ *pad->pos = pad->min_pos + *pad->size / 2;
+ }
+ if (*pad->pos > pad->max_pos - *pad->size / 2) {
+ *pad->pos = pad->max_pos - *pad->size / 2;
}
- if (pad->pos < min + pad->size / 2) pad->pos = min + pad->size / 2;
- if (pad->pos > max - pad->size / 2) pad->pos = max - pad->size / 2;
}
void
clear_paddle(struct paddle *pad)
{
- int off;
- int pos;
+ int x_off;
+ int y_off;
+ int x;
+ int y;
- off = pad->pos;
- off -= pad->size / 2;
+ x_off = pad->x - pad->width / 2;
+ y_off = pad->y - pad->height / 2;
- if (pad->type == PADDLE_TYPE_H) {
- for (pos = 0; pos < pad->size; ++pos) {
- mvprintw(pad->track, off + pos, " ");
- }
- } else {
- for (pos = 0; pos < pad->size; ++pos) {
- mvprintw(off + pos, pad->track, " ");
+ for (x = 0; x < pad->width; ++x) {
+ for (y = 0; y < pad->height; ++y) {
+ mvprintw(y_off + y, x_off + x, " ");
}
}
}
@@ -44,23 +36,19 @@ clear_paddle(struct paddle *pad)
void
draw_paddle(struct paddle *pad)
{
- int off;
- int pos;
+ int x_off;
+ int y_off;
+ int x;
+ int y;
- off = pad->pos;
- off -= pad->size / 2;
+ x_off = pad->x - pad->width / 2;
+ y_off = pad->y - pad->height / 2;
attr_on(WA_REVERSE, NULL);
-
- if (pad->type == PADDLE_TYPE_H) {
- for (pos = 0; pos < pad->size; ++pos) {
- mvprintw(pad->track, off + pos, " ");
- }
- } else {
- for (pos = 0; pos < pad->size; ++pos) {
- mvprintw(off + pos, pad->track, " ");
+ for (x = 0; x < pad->width; ++x) {
+ for (y = 0; y < pad->height; ++y) {
+ mvprintw(y_off + y, x_off + x, " ");
}
}
-
attr_off(WA_REVERSE, NULL);
}
diff --git a/src/paddle.h b/src/paddle.h
index 8d885b0..8d0e69d 100644
--- a/src/paddle.h
+++ b/src/paddle.h
@@ -13,12 +13,16 @@ enum paddle_type {
};
struct paddle {
- int pos;
- int size;
+ int x;
+ int y;
+ int width;
+ int height;
+ int *pos;
+ int *size;
int speed;
int dir;
- int type;
- int track;
+ int min_pos;
+ int max_pos;
};
void clear_paddle(struct paddle *pad);
diff --git a/src/player.c b/src/player.c
index 09b1596..8e9f07c 100644
--- a/src/player.c
+++ b/src/player.c
@@ -15,23 +15,35 @@ new_player(int id)
}
p->score = 0;
- p->paddle_h.pos = PADDLE_H_POS_START;
- p->paddle_v.pos = PADDLE_V_POS_START;
- p->paddle_h.size = PADDLE_H_SIZE_NORMAL;
- p->paddle_v.size = PADDLE_V_SIZE_NORMAL;
+
+ p->paddle_h.x = PADDLE_H_POS_START;
+ p->paddle_v.y = PADDLE_V_POS_START;
+ if (id == 0) {
+ p->paddle_h.y = BOARD_HEIGHT - 2;
+ p->paddle_v.x = 2;
+ } else {
+ p->paddle_h.y = 1;
+ p->paddle_v.x = BOARD_WIDTH - 2;
+ }
+ p->paddle_h.width = PADDLE_H_SIZE_NORMAL;
+ p->paddle_h.height = 1;
+ p->paddle_v.height = PADDLE_V_SIZE_NORMAL;
+ p->paddle_v.width = 1;
+
+ p->paddle_h.pos = &p->paddle_h.x;
+ p->paddle_v.pos = &p->paddle_v.y;
+ p->paddle_h.size = &p->paddle_h.width;
+ p->paddle_v.size = &p->paddle_v.height;
+
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;
- p->paddle_h.type = PADDLE_TYPE_H;
- p->paddle_v.type = PADDLE_TYPE_V;
- if (id == 0) {
- p->paddle_h.track = BOARD_HEIGHT - 2;
- p->paddle_v.track = 2;
- } else {
- p->paddle_h.track = 1;
- p->paddle_v.track = BOARD_WIDTH - 2;
- }
+
+ p->paddle_h.min_pos = 3;
+ p->paddle_h.max_pos = BOARD_WIDTH - 2;
+ p->paddle_v.min_pos = 2;
+ p->paddle_v.max_pos = BOARD_HEIGHT - 2;
return p;
}