Menu
CoddyTech

Bắt lấy

Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 29 trên 35.

Hai hình chữ nhật va chạm khi chúng chồng lên nhau. a.colliderect(b) trả về True khi Rect a và Rect b chồng lên nhau, dù chỉ một pixel.

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

Khối được bắt sẽ quay lại phía trên cùng, giống như khối bị bỏ lỡ. Kiểm tra xem chúng có chồng lên nhau an toàn hơn là kiểm tra vị trí chính xác: một khối di chuyển mỗi lần 3 pixel có thể vượt qua đúng giá trị y mà bạn kiểm tra.

challenge icon

Thử thách

Dễ

Hãy để chiếc giỏ bắt khối.

  1. Sau khi kiểm tra khối bị bỏ lỡ, hãy kiểm tra block.colliderect(basket).
  2. Khi điều kiện này đúng, đưa khối trở lại đầu màn hình như khi khối bị bỏ lỡ: block.y = -20 và một giá trị ngẫu nhiên cho block.x.

Nhấn Chơi và bắt một khối: khối sẽ trở lại đầu màn hình. Sau đó nhấn Kiểm tra.

Tự làm thử

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

Tất cả bài học trong Vòng lặp trò chơi

Tự luyện tập: Playground Pygame