Menu
CoddyTech

¡Atrápalo!

Parte de la sección El bucle del juego del Journey de Pygame de Coddy. Lección 26 de 32.

Dos rectángulos colisionan cuando se superponen. a.colliderect(b) es True cuando Rect a y Rect b se superponen, aunque sea por un solo píxel.

if block.colliderect(basket):
    block.y = -20
    block.x = random.randint(0, 460)

Un bloque atrapado vuelve a la parte superior, igual que uno que no se atrapó. Comprobar la superposición es más seguro que comprobar posiciones exactas: un bloque que se mueve de 3 en 3 píxeles puede saltarse por completo el único valor de y que compruebas.

challenge icon

Desafío

Fácil

Después de comprobar si el bloque se ha dejado caer, cuando el bloque colisione con la cesta, devuélvelo a la parte superior: block.y = -20 y un block.x aleatorio, igual que cuando se deja caer un bloque.

Pruébalo tú mismo

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)

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_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    block.y += 3
    if block.top > 360:
        block.y = -20
        block.x = random.randint(0, 460)

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Todas las lecciones de El bucle del juego

Practica por tu cuenta: Playground de Pygame