Menu
CoddyTech

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 = True

Las 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).

challenge icon

Desafío

Intermedio

Espera a que se saque después de cada punto.

  1. Antes del bucle, establece waiting = False.
  2. Pon el movimiento de la pelota, los rebotes y la puntuación dentro de if not waiting:, y establece waiting = True después de cada punto.
  3. Un evento KEYDOWN de pygame.K_SPACE establece waiting = False. Mientras espera, muestra Press Space to serve centrado 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