Top.Mail.Ru
Ответы
Аватар пользователя
2мес
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Помогите изменить программу 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)

По дате
По рейтингу
Аватар пользователя
Мастер
2мес

Вместо collidepoint используй colliderect для проверки столкновений с ракетками и нужно будет обновить позицию мяча, чтобы он не входил в ракетки

12345678910111213141516171819202122232425262728293031323334353637383940414243
 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: