De vuelta al centro
Parte de la sección Proyectos del Journey de Pygame de Coddy. Lección 15 de 31.
Cuando un jugador falla, la pelota sale de la ventana por su lado. Devuélvela al centro y envíala hacia el otro lado.
if ball.right < 0 or ball.left > 600:
ball.center = (300, 200)
vx = -vxball.right < 0 significa que toda la pelota ha pasado el borde izquierdo, y ball.left > 600 que toda la pelota ha pasado el borde derecho. Al establecer ball.center, se mueve el Rect para que su centro esté en ese punto; su tamaño permanece igual.
En este caso, vx = -vx es seguro: la pelota está en el centro, lejos de cualquier paleta.
Desafío
FácilCuando toda la pelota haya pasado el borde izquierdo o derecho, establece su center en (300, 200) e invierte vx.
Pruébalo tú mismo
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
ball = pygame.Rect(293, 193, 14, 14)
vx, vy = 5, 4
left = pygame.Rect(20, 160, 12, 80)
right = pygame.Rect(568, 160, 12, 80)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
left.y -= 6
if keys[pygame.K_s]:
left.y += 6
if keys[pygame.K_UP]:
right.y -= 6
if keys[pygame.K_DOWN]:
right.y += 6
left.clamp_ip(screen.get_rect())
right.clamp_ip(screen.get_rect())
ball.x += vx
ball.y += vy
if ball.top <= 0 or ball.bottom >= 400:
vy = -vy
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(vx)
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), left)
pygame.draw.rect(screen, (235, 80, 80), right)
pygame.draw.rect(screen, (255, 196, 0), ball)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Todas las lecciones de Proyectos
2Pong para dos
La pelotaRebotePractica por tu cuenta: Playground de Pygame