Menu
CoddyTech

كتلة ساقطة

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

كل ما يسقط هو شيء تزداد قيمة y الخاصة به في كل إطار. اجعل الكتلة أيضًا من النوع Rect، وأضف قيمة إلى y الخاصة بها في كل تكرار للحلقة:

block = pygame.Rect(220, 0, 20, 20)

while running:
    # الأحداث والمفاتيح
    block.y += 3
    # املأ، ارسم

عند 60 إطارًا في الثانية، تعادل 3 بكسلات في الإطار 180 بكسلًا في الثانية. ارتفاع النافذة 360 بكسلًا، لذا تستغرق الكتلة ثانيتين لتصل إلى الأسفل.

تتحرك هذه اللعبة بحسب الإطار، كما في Move a Square، وليس بحسب dt. لا يحتفظ Rect إلا بأعداد صحيحة، لذا فإن خطوة مثل 0.6 بكسل ستُقرب إلى 0، ولن يتحرك Rect أبدًا. تحتفظ الألعاب التي تحرك Rects بحسب الوقت بالموضع في Vector2 وتنسخه إلى Rect.

تستمر الكتلة في السقوط بعد خروجها من النافذة. لا شيء يوقفها بعد؛ يعيدها الدرس التالي.

challenge icon

التحدي

سهل

أسقِط كتلة من الأعلى.

  1. أسفل السلة، اكتب block = pygame.Rect(220, 0, 20, 20).
  2. في الحلقة، بعد تحرّك السلة، أضف 3 إلى block.y.
  3. ارسم الكتلة باللون الأحمر (235, 80, 80) بعد السلة.

اضغط على «العب»: تسقط كتلة حمراء من الأعلى. ثم اضغط على «تحقق».

جرّب بنفسك

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)

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

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

جميع دروس اصنع ألعابًا باستخدام Pygame

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