De vuelta al centro
Lección 33 de 40 del curso Crea juegos con Pygame de Coddy.
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. Asignar un valor a ball.center mueve el Rect para que su centro quede en ese punto; su tamaño no cambia.
En este caso, vx = -vx es seguro: la pelota está en el centro, lejos de cualquier pala.
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()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Crea juegos con Pygame
1El ciclo del juego
Abrir una ventanaRellenar el fondo4Dos jugadores y una pelota
La pelotaRebotarPractica por tu cuenta: Playground de Pygame