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 אונליין