Загрузка данных


#include <stdio.h>

void draw(int ball_x, int ball_y, int r1_y, int r2_y, int score1, int score2);
int move_r1(int y, char key);
int move_r2(int y, char key);
int get_next_dy(int ball_y, int ball_dy);
int get_next_dx(int ball_x, int ball_y, int ball_dx, int ball_dy, int r1_y, int r2_y);

int main(void) {
    int r1_y = 12, r2_y = 12, ball_x = 39, ball_y = 12;
    int ball_dx = -1, ball_dy = -1, score1 = 0, score2 = 0, game_over = 0;
    char key = ' ';
    draw(ball_x, ball_y, r1_y, r2_y, score1, score2);
    while (score1 < 21 && score2 < 21 && game_over == 0) {
        do {
            if (scanf("%c", &key) != 1) {
                key = 'q';
            }
        } while (key == '\n');
        if (key == 'q' || key == 'Q') {
            game_over = 1;
        } else {
            r1_y = move_r1(r1_y, key);
            r2_y = move_r2(r2_y, key);
            ball_dx = get_next_dx(ball_x, ball_y, ball_dx, ball_dy, r1_y, r2_y);
            ball_dy = get_next_dy(ball_y, ball_dy);
            ball_x += ball_dx;
            ball_y += ball_dy;
            if (ball_x <= 0 || ball_x >= 79) {
                if (ball_x <= 0) {
                    score2++;
                    ball_dx = 1;
                } else {
                    score1++;
                    ball_dx = -1;
                }
                ball_x = 39;
                ball_y = 12;
            }
            draw(ball_x, ball_y, r1_y, r2_y, score1, score2);
        }
    }
    if (score1 == 21) {
        printf("Player 1 WINS!\n");
    } else if (score2 == 21) {
        printf("Player 2 WINS!\n");
    }
    return 0;
}

void draw(int ball_x, int ball_y, int r1_y, int r2_y, int score1, int score2) {
    printf("\033[H\033[J");
    printf("Score: Player 1 = %d | Player 2 = %d\n", score1, score2);

    for (int y = 0; y < 25; y++) {
        for (int x = 0; x < 80; x++) {
            if (y == 0 || y == 24) {
                printf("-");
            } else if (x == ball_x && y == ball_y) {
                printf("O");
            } else if (x == 2 && y >= r1_y - 1 && y <= r1_y + 1) {
                printf("|");
            } else if (x == 77 && y >= r2_y - 1 && y <= r2_y + 1) {
                printf("|");
            } else if (x == 39) {
                printf("|");
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
}

int move_r1(int y, char key) {
    int new_y = y;

    if ((key == 'a' || key == 'A') && y > 2) {
        new_y = y - 1;
    } else if ((key == 'z' || key == 'Z') && y < 22) {
        new_y = y + 1;
    }

    return new_y;
}

int move_r2(int y, char key) {
    int new_y = y;

    if ((key == 'k' || key == 'K') && y > 2) {
        new_y = y - 1;
    } else if ((key == 'm' || key == 'M') && y < 22) {
        new_y = y + 1;
    }

    return new_y;
}

int get_next_dy(int ball_y, int ball_dy) {
    int new_dy = ball_dy;
    int next_y = ball_y + ball_dy;

    if (next_y <= 0 || next_y >= 24) {
        new_dy = -ball_dy;
    }

    return new_dy;
}

int get_next_dx(int ball_x, int ball_y, int ball_dx, int ball_dy, int r1_y, int r2_y) {
    int new_dx = ball_dx;
    int next_x = ball_x + ball_dx;
    int next_y = ball_y + ball_dy;

    if (next_y <= 0 || next_y >= 24) {
        next_y = ball_y - ball_dy;
    }

    if (ball_dx < 0 && next_x == 2 && next_y >= r1_y - 1 && next_y <= r1_y + 1) {
        new_dx = -ball_dx;
    } else if (ball_dx > 0 && next_x == 77 && next_y >= r2_y - 1 && next_y <= r2_y + 1) {
        new_dx = -ball_dx;
    }

    return new_dx;
}