


Помогите изменить программу Python!
Помогите изменить программу Python, чтобы мяч сразу отскакивал от стены и от ракетки, а не входил в них
Программа:
import pygame
import sys
import math
pygame.init()
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Пинг Понг")
white = (255, 255, 255)
paddle_color = (0, 0, 0)
ball_pos = [width // 2, height // 2]
ball_vel = [5, 5]
paddle_width, paddle_height = 10, 100
paddle_speed = 10
left_paddle = pygame.Rect(30, height // 2 - paddle_height // 2, paddle_width, paddle_height)
right_paddle = pygame.Rect(width - 40, height // 2 - paddle_height // 2, paddle_width, paddle_height)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[pygame.K_w] and left_ paddle.top > 0:
left_paddle.y -= paddle_speed
if keys[pygame.K_s] and left_paddle.bottom < height:
left_paddle.y += paddle_speed
if keys[pygame.K_UP] and right_ paddle.top > 0:
right_paddle.y -= paddle_speed
if keys[pygame.K_DOWN] and right_paddle.bottom < height:
right_paddle.y += paddle_speed
ball_pos[0] += ball_vel[0]
ball_pos[1] += ball_vel[1]
if ball_pos[1] <= 0 or ball_pos[1] >= height:
ball_vel[1] = -ball_vel[1]
if left_paddle.collidepoint(ball_pos[0], ball_pos[1]) or right_paddle.collidepoint(ball_pos[0], ball_pos[1]):
ball_vel[0] = -ball_vel[0]
ball_color = (
int((math.sin(pygame.time.get_ticks() * 0.001 + 0) + 1) * 127.5),
int((math.sin(pygame.time.get_ticks() * 0.001 + 2) + 1) * 127.5),
int((math.sin(pygame.time.get_ticks() * 0.001 + 4) + 1) * 127.5)
)
screen.fill(white)
pygame.draw.rect(screen, paddle_color, left_paddle)
pygame.draw.rect(screen, paddle_color, right_paddle)
pygame.draw.circle (screen, ball_color, (int(ball_pos[0]), int(ball_pos[1])), 10)
pygame.display.flip()
pygame.time.delay(30)
Вместо collidepoint используй colliderect для проверки столкновений с ракетками и нужно будет обновить позицию мяча, чтобы он не входил в ракетки
import pygame
import sys
import math
pygame.init()
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Пинг Понг")
white = (255, 255, 255)
paddle_color = (0, 0, 0)
ball_pos = [width // 2, height // 2]
ball_vel = [5, 5]
paddle_width, paddle_height = 10, 100
paddle_speed = 10
left_paddle = pygame.Rect(30, height // 2 - paddle_height // 2, paddle_width, paddle_height)
right_paddle = pygame.Rect(width - 40, height // 2 - paddle_height // 2, paddle_width, paddle_height)
ball_rect = pygame.Rect(ball_pos[0], ball_pos[1], 20, 20) # Создаем прямоугольник для мяча
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[pygame.K_w] and left_paddle.top > 0:
left_paddle.y -= paddle_speed
if keys[pygame.K_s] and left_paddle.bottom < height:
left_paddle.y += paddle_speed
if keys[pygame.K_UP] and right_paddle.top > 0:
right_paddle.y -= paddle_speed
if keys[pygame.K_DOWN] and right_paddle.bottom < height:
right_paddle.y += paddle_speed
ball_pos[0] += ball_vel[0]
ball_pos[1] += ball_vel[1]
ball_rect.topleft = (ball_pos[0], ball_pos[1]) # Обновляем позицию мяча
if ball_pos[1] <= 0 or ball_pos[1] >= height - 20: