Menu
CoddyTech

Atrápalo

Lección 12 de 41 del curso Crea juegos con Pygame de Coddy.

Dos rectángulos colisionan cuando se superponen. a.colliderect(b) es True cuando el Rect a y el Rect b se superponen, aunque sea por un 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 atrapa. Comprobar la superposición es más seguro que comprobar posiciones exactas: un bloque que se mueve de 3 píxeles en 3 píxeles puede saltarse el único valor de y que compruebas.

challenge icon

Desafío

Fácil

Haz que la cesta atrape el bloque.

  1. Después de la prueba del bloque que se ha escapado, comprueba block.colliderect(basket).
  2. Cuando sea verdadero, devuelve el bloque a la parte superior como en el caso de un bloque que se ha escapado: block.y = -20 y un valor aleatorio para block.x.

Pulsa «Jugar» y atrapa un bloque: vuelve a la parte superior. Después, pulsa «Comprobar».

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 Crea juegos con Pygame

Practica por tu cuenta: Playground de Pygame