From 236cbdad591ec56e6d4e2954fb8cdd3e4ff813ae Mon Sep 17 00:00:00 2001 From: Atsutane Date: Thu, 7 May 2009 11:05:01 +0200 Subject: ball_movement(): Fixed Collision detection with the upper and lower parts of a pad. ball_launch(): Fixed rendering and movement bugs. game(): Draw pad of player 1 before entering the main loop. --- src/pong.c | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/src/pong.c b/src/pong.c index 9ce24a3..6f1928a 100644 --- a/src/pong.c +++ b/src/pong.c @@ -186,19 +186,19 @@ void ball_movement(struct game_data *gd) { if (gd->ball->x == 1) { /* Does it hit p1s pad? */ - if ((gd->ball->y > gd->p1->y-2) && - (gd->ball->y < gd->p1->y+2)) { + if ((gd->ball->y > gd->p1->y-3) && + (gd->ball->y < gd->p1->y+3)) { gd->ball->mv_left = FALSE; gd->ball->mv_right = TRUE; gd->ball->mv_up = FALSE; gd->ball->mv_down = FALSE; - if ((gd->ball->y > gd->p1->y-2) && + if ((gd->ball->y > gd->p1->y-3) && (gd->ball->y < gd->p1->y)) { gd->ball->mv_up = TRUE; } if ((gd->ball->y > gd->p1->y) && - (gd->ball->y < gd->p1->y+2)) { + (gd->ball->y < gd->p1->y+3)) { gd->ball->mv_down = TRUE; } } @@ -206,19 +206,19 @@ void ball_movement(struct game_data *gd) { if (gd->ball->x == gd->max_field_x-1) { /* Does it hit p2s pad? */ - if ((gd->ball->y > gd->p2->y-2) && - (gd->ball->y < gd->p2->y+2)) { + if ((gd->ball->y > gd->p2->y-3) && + (gd->ball->y < gd->p2->y+3)) { gd->ball->mv_left = TRUE; gd->ball->mv_right = FALSE; gd->ball->mv_up = FALSE; gd->ball->mv_down = FALSE; - if ((gd->ball->y > gd->p2->y-2) && + if ((gd->ball->y > gd->p2->y-3) && (gd->ball->y < gd->p2->y)) { gd->ball->mv_up = TRUE; } if ((gd->ball->y > gd->p2->y) && - (gd->ball->y < gd->p2->y+2)) { + (gd->ball->y < gd->p2->y+3)) { gd->ball->mv_down = TRUE; } } @@ -291,6 +291,11 @@ void ball_launch(struct game_data *gd) { p = (gd->ball->x == 1) ? gd->p1 : gd->p2; + mvaddch(p->y-2, 0, ' '); + mvaddch(p->y-1, 0, ' '); + mvaddch(p->y, 0, ' '); + mvaddch(p->y+1, 0, ' '); + mvaddch(p->y+2, 0, ' '); p->y = gd->ball->y; /* Check if it's the turn of the player, @@ -298,20 +303,36 @@ void ball_launch(struct game_data *gd) { */ if (p->x == 0) { while ((c = getch()) != ' ') { + mvaddch(p->y-2, 0, ' '); + mvaddch(p->y-1, 0, ' '); + mvaddch(p->y, 0, ' '); + mvaddch(p->y+1, 0, ' '); + mvaddch(p->y+2, 0, ' '); + if ((c == KEY_UP) && - (p->y > gd->ball->y-2) && - (p->y < gd->ball->y+2)) { + (p->y > gd->ball->y-3) && + (p->y < gd->ball->y+3)) { p->y--; } else if ((c == KEY_DOWN) && - (p->y > gd->ball->y-2) && - (p->y < gd->ball->y+2)) { + (p->y > gd->ball->y-3) && + (p->y < gd->ball->y+3)) { p->y++; } + mvaddch(p->y-2, 0, '|'); + mvaddch(p->y-1, 0, '|'); + mvaddch(p->y, 0, '|'); + mvaddch(p->y+1, 0, '|'); + mvaddch(p->y+2, 0, '|'); } } else { p->y += rand()%3 - 1; + mvaddch(p->y-2, 0, '|'); + mvaddch(p->y-1, 0, '|'); + mvaddch(p->y, 0, '|'); + mvaddch(p->y+1, 0, '|'); + mvaddch(p->y+2, 0, '|'); } } @@ -373,6 +394,11 @@ int game(void) { p=0; gd->ball->mv_right = TRUE; + mvaddch(gd->p1->y-2, 0, '|'); + mvaddch(gd->p1->y-1, 0, '|'); + mvaddch(gd->p1->y, 0, '|'); + mvaddch(gd->p1->y+1, 0, '|'); + mvaddch(gd->p1->y+2, 0, '|'); ball_movement(gd); p2_ai(gd); -- cgit v1.2.3-70-g09d2