← Все вопросы

Как сделать понг (Pong) на pygame — мячик отскакивает от стен и ракеток?

Задан 21 месяц назад1.4к просмотров1 ответ
8

Решил для практики написать пинг-понг на двоих. Ракетки управляются и рисуются. Не пойму, как заставить мяч летать и правильно отскакивать от верха/низа и от ракеток. Сейчас он просто улетает за экран.

1 ответ

13
✓ Принятый ответ — помог автору

Мячу нужны не только координаты, но и скорость по каждой оси (bx_speed, by_speed). Отскок = смена знака соответствующей скорости.

bx, by = 320, 240
bx_speed, by_speed = 4, 4
ball = pygame.Rect(bx, by, 16, 16)

while running:
    # ... события ...
    ball.x += bx_speed
    ball.y += by_speed

    # отскок от верха и низа
    if ball.top <= 0 or ball.bottom >= HEIGHT:
        by_speed = -by_speed

    # отскок от ракеток (left_paddle, right_paddle — это Rect)
    if ball.colliderect(left_paddle) or ball.colliderect(right_paddle):
        bx_speed = -bx_speed

    # гол: мяч ушёл за левый/правый край
    if ball.left <= 0:
        right_score += 1
        ball.center = (WIDTH//2, HEIGHT//2)   # в центр
    if ball.right >= WIDTH:
        left_score += 1
        ball.center = (WIDTH//2, HEIGHT//2)

Суть: от стен — переворачиваем вертикальную скорость, от ракеток — горизонтальную, за боковой край — гол и возврат мяча в центр. Используй Rect и его свойства .top/.bottom/.left/.right — так короче и понятнее.

Ваш ответ

Войдите, чтобы ответить на вопрос.