Menu
CoddyTech

Поймай!

Урок 12 из 41 курса Создавайте игры с Pygame на Coddy.

Два прямоугольника сталкиваются, когда они перекрываются. a.colliderect(b) возвращает True, когда Rect a и Rect b перекрываются хотя бы на один пиксель.

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

Пойманный блок возвращается наверх так же, как и пропущенный. Проверять перекрытие безопаснее, чем проверять точные координаты: блок, перемещающийся на 3 пикселя за раз, может проскочить мимо единственного значения y, которое ты проверяешь.

challenge icon

Задание

Легко

Пусть корзина ловит блок.

  1. После проверки пропущенного блока проверьте block.colliderect(basket).
  2. Если условие истинно, отправьте блок обратно наверх, как при пропуске блока: block.y = -20 и случайное значение block.x.

Нажмите «Играть» и поймайте блок: он вернётся наверх. Затем нажмите «Проверить».

Попробуйте сами

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

Все уроки раздела Создавайте игры с Pygame

Потренируйтесь самостоятельно: Песочница Pygame