Saque
Parte de la sección Proyectos del Journey de Pygame de Coddy. Lección 17 de 31.
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 palas están fuera del if, así que los jugadores pueden prepararse mientras la pelota espera. La barra espaciadora es una acción que se activa una vez por pulsación, por lo que se controla mediante 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. - Coloca 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 esperas, 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()
Todas las lecciones de Proyectos
Practica por tu cuenta: Playground de Pygame