Menu
CoddyTech

Attrape-le

Fait partie de la section La boucle de jeu du Journey Pygame de Coddy. Leçon 26 sur 32.

Deux rectangles entrent en collision lorsqu’ils se chevauchent. a.colliderect(b) vaut True lorsque Rect a et Rect b se chevauchent, même d’un seul pixel.

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

Un bloc attrapé retourne en haut, comme un bloc manqué. Tester le chevauchement est plus sûr que de tester des positions exactes : un bloc qui se déplace de 3 pixels à la fois peut passer directement au-dessus de la seule valeur y que tu testes.

challenge icon

Défi

Facile

Après la vérification du bloc manqué, lorsque le bloc entre en collision avec le panier, renvoie-le en haut : block.y = -20 et attribue une valeur aléatoire à block.x, comme pour un bloc manqué.

Essayez vous-même

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

Toutes les leçons de La boucle de jeu

Entraînez-vous par vous-même : Playground Pygame