Menu
CoddyTech

בלוק נופל

חלק מהיחידה לולאת המשחק במסלול ה-Pygame של Coddy. שיעור 24 מתוך 32.

עצם שנופל הוא עצם שערך ה־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 אונליין