Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define HEIGHT 25
- #define WIDTH 80
- #define WIN_SCORE 21
- #define ROCKET_HEIGHT 3
- #define TRUE 1
- #define FALSE 0
- int drawField(int x_ball, int y_ball, int y_rocket1, int y_rocket2);
- int calc_new_rocket_pos(int current_rocket_y);
- int is_ball_outside_left_border(int ball_x);
- int is_ball_outside_right_border(int ball_x);
- int calculate_ball_velocity_y(int y_ball_velocity, int y_ball);
- int calculate_ball_velocity_x(int x_ball_velocity, int x_ball, int y_ball, int y_rocket_left, int y_rocket_right);
- int main(void)
- {
- int score1 = 0, score2 = 0;
- while (1) {
- int x_ball = WIDTH / 2;
- int y_ball = HEIGHT / 2;
- int x_ball_velocity = -1;
- int y_ball_velocity = 1;
- int y_rocket1 = HEIGHT / 2 - 1;
- int y_rocket2 = HEIGHT / 2 - 1;
- int is_playing = TRUE;
- int player_turn_num = 1; // 1 - первый игрок, 2 - второй игрок
- drawField(x_ball, y_ball, y_rocket1, y_rocket2);
- while (is_playing == TRUE) {
- printf("\t\t \t\t%d \t : \t %d\n", score1, score2);
- if (player_turn_num == 1) {
- printf("First player turn:");
- y_rocket1 = calc_new_rocket_pos(y_rocket1);
- player_turn_num = 2;
- } else {
- printf("\nSecond player turn:");
- y_rocket2 = calc_new_rocket_pos(y_rocket2);
- player_turn_num = 1;
- }
- y_ball_velocity = calculate_ball_velocity_y(y_ball_velocity, y_ball);
- x_ball_velocity = calculate_ball_velocity_x(x_ball_velocity, x_ball, y_ball, y_rocket1, y_rocket2);
- x_ball += x_ball_velocity;
- y_ball += y_ball_velocity;
- if (is_ball_outside_left_border(x_ball) == TRUE) {
- score2 += 1;
- is_playing = FALSE;
- }
- else if (is_ball_outside_right_border(x_ball) == TRUE) {
- score1 += 1;
- is_playing = FALSE;
- }
- drawField(x_ball, y_ball, y_rocket1, y_rocket2);
- }
- }
- }
- int drawField(int x_ball, int y_ball, int y_rocket1, int y_rocket2)
- {
- const char vertical = '|';
- const char gorizontal = '-';
- const char corner = '+';
- const char ball = '0';
- const int x_rocket1 = 2;
- const int x_rocket2 = WIDTH - 3;
- for (int y = 0; y < HEIGHT; y++)
- {
- for (int x = 0; x < WIDTH; x++)
- {
- if ((x == 0 || x == WIDTH - 1) && (y == 0 || y == HEIGHT - 1))
- {
- printf("%c", corner);
- }
- else if (y == 0 || y == HEIGHT - 1)
- {
- printf("%c", gorizontal);
- }
- else if (x == 0 || x == WIDTH - 1)
- {
- printf("%c", vertical);
- }
- else if (x == x_ball && y == y_ball)
- {
- printf("%c", ball);
- }
- else if (x == x_rocket1 && (y == y_rocket1 || y == y_rocket1 + 1 || y == y_rocket1 + 2))
- {
- printf("%c", vertical);
- }
- else if (x == x_rocket2 && (y == y_rocket2 || y == y_rocket2 + 1 || y == y_rocket2 + 2))
- {
- printf("%c", vertical);
- }
- else
- {
- printf(" ");
- }
- }
- printf("\n");
- }
- return 0;
- }
- int calc_new_rocket_pos(int current_rocket_y) {
- char button;
- scanf(" %c", &button);
- if (button == 'a' || button == 'k') {
- current_rocket_y -= 1;
- }
- else if (button == 'z' || button == 'm') {
- current_rocket_y += 1;
- }
- int max_rocket_y = HEIGHT - ROCKET_HEIGHT - 1;
- if (current_rocket_y > max_rocket_y)
- return max_rocket_y;
- int min_rocket_y = 1;
- if (current_rocket_y < min_rocket_y)
- return min_rocket_y;
- return current_rocket_y;
- }
- int is_ball_outside_left_border(int ball_x) {
- if (ball_x <= 1)
- return TRUE;
- return FALSE;
- }
- int is_ball_outside_right_border(int ball_x) {
- if (ball_x >= WIDTH - 1)
- return TRUE;
- return FALSE;
- }
- int calculate_ball_velocity_y(int y_ball_velocity, int y_ball) {
- if (y_ball <= 2)
- y_ball_velocity = 1;
- if (y_ball >= HEIGHT - 2)
- y_ball_velocity = -1;
- printf("\ncalculate_ball_velocity_y: %d %d\n", y_ball, y_ball_velocity);
- return y_ball_velocity;
- }
- int calculate_ball_velocity_x(int x_ball_velocity, int x_ball, int y_ball, int y_rocket_left, int y_rocket_right) {
- if (x_ball == 3) {
- if (y_ball < y_rocket_left + ROCKET_HEIGHT && y_ball >= y_rocket_left) {
- x_ball_velocity *= -1;
- }
- }
- if (x_ball == WIDTH - 4) {
- if (y_ball < y_rocket_right + ROCKET_HEIGHT && y_ball >= y_rocket_right) {
- x_ball_velocity *= -1;
- }
- }
- return x_ball_velocity;
- }
Advertisement
Add Comment
Please, Sign In to add comment