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

תרגלו בעצמכם: Pygame אונליין