Menu
CoddyTech

Złap to

Lekcja 12 z 41 w kursie Twórz gry w Pygame w Coddy.

Dwa prostokąty zderzają się, gdy na siebie nachodzą. a.colliderect(b) ma wartość True, gdy Rect a i Rect b na siebie nachodzą, choćby o jeden piksel.

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

Złapany blok wraca na górę, tak samo jak ten, który został ominięty. Sprawdzanie nakładania się jest bezpieczniejsze niż sprawdzanie dokładnych pozycji: blok poruszający się co 3 piksele może przeskoczyć wprost przez jedną wartość y, którą sprawdzasz.

challenge icon

Wyzwanie

Łatwy

Niech koszyk łapie blok.

  1. Po teście sprawdzającym, czy blok został ominięty, przetestuj block.colliderect(basket).
  2. Gdy wynik jest prawdziwy, odeślij blok na górę tak jak po ominięciu: block.y = -20 i losowe block.x.

Naciśnij „Graj” i złap blok: wróci na górę. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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

Wszystkie lekcje w sekcji Twórz gry w Pygame

Poćwicz samodzielnie: Edytor online Pygame