Saque
Lección 35 de 41 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
IntermedioEspera a que se saque después de cada punto.
- Antes del bucle, establece
waiting = False. - Pon 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 de
pygame.K_SPACEestablecewaiting = False. Mientras espera, muestraPress Space to servecentrado en(300, 360).
Pulsa «Jugar» y deja que la pelota pase de largo: espera en el centro hasta que pulses Espacio. Después, pulsa «Comprobar».
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()
Todas las lecciones de Crea juegos con Pygame
Practica por tu cuenta: Playground de Pygame