Menu
CoddyTech

التقطها

الدرس 12 من 41 في دورة اصنع ألعابًا باستخدام Pygame على Coddy.

يتصادم مستطيلان عندما يتداخلان. تكون a.colliderect(b) هي True عندما يتداخل المستطيل a والمستطيل 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

تدرّب بنفسك: Playground لـ Pygame