Saque
Lección 35 de 40 del curso Crea juegos con Pygame de Coddy.
Después de un punto, la pelota debe esperar en el centro hasta que un jugador esté listo. Una bandera indica si está esperando:
waiting = False
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
waiting = False
# las paletas se mueven siempre
if not waiting:
# la pelota se mueve, rebota y anota; un punto establece waiting = TrueLas paletas se mantienen fuera de if, para que los jugadores puedan prepararse mientras la pelota espera. La barra espaciadora es una acción que se activa una vez por pulsación, así que se obtiene de un evento KEYDOWN.
Mientras la pelota espera, muestra Press Space to serve cerca de la parte inferior, centrado en (300, 360).
Desafío
Intermedio- Antes del bucle, establece
waiting = False. - Incluye el movimiento de la pelota, los rebotes y la puntuación dentro de
if not waiting:, y establecewaiting = Truedespués de cada punto. - Un evento KEYDOWN para
pygame.K_SPACEestablecewaiting = False. - Mientras espera, muestra
Press Space to servecentrado en(300, 360).
Pruébalo tú mismo
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)
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)
left_score = 0
right_score = 0
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)
if ball.left > 600:
left_score += 1
ball.center = (300, 200)
vx = -vx
if ball.right < 0:
right_score += 1
ball.center = (300, 200)
vx = -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)
score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
screen.blit(score, score.get_rect(center=(300, 30)))
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