Menu
CoddyTech

Attrape-le

Leçon 12 sur 41 du cours Créer des jeux avec Pygame de Coddy.

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 dépasser directement la valeur y que vous testez.

challenge icon

Défi

Facile

Fais en sorte que le panier attrape le bloc.

  1. Après le test du bloc manqué, teste block.colliderect(basket).
  2. Lorsque la condition est vraie, renvoie le bloc en haut comme pour un bloc manqué : block.y = -20 et une valeur aléatoire pour block.x.

Appuie sur « Jouer » et attrape un bloc : il retourne en haut. Puis appuie sur « Vérifier ».

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 Créer des jeux avec Pygame

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