Menu
CoddyTech

De vuelta al centro

Lección 33 de 41 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 = -vx

ball.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.

challenge icon

Desafío

Fácil

Devuelve al centro una pelota que se haya escapado.

  1. Cuando toda la pelota haya pasado el borde izquierdo o derecho, establece su center en (300, 200).
  2. Invierte también vx en ese momento.

Pulsa «Jugar» y deja pasar la pelota: volverá y se dirigirá hacia el otro lado. 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()

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()

Todas las lecciones de Crea juegos con Pygame

Practica por tu cuenta: Playground de Pygame