Menu
CoddyTech

הסרת כוכב

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

גם רשימות מצטמצמות. stars.pop() מסירה את הפריט האחרון, החדש ביותר. stars.pop(0) מסירה את הראשון. stars.remove(item) מסירה את הפריט הראשון ששווה ל־item.

הסרה מרשימה ריקה היא שגיאה, IndexError: pop from empty list, והתוכנית נעצרת. בדקו קודם את האורך:

if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
    if len(stars) > 0:
        stars.pop()

שימו לב לשני if. החיצוני בוחר את הלחיצה על מקש הרווח מתוך האירועים, והפנימי מוודא שיש כוכב להסיר.

בתוך if, רשימה ריקה נחשבת False ורשימה עם פריטים נחשבת True, לכן if stars: פירושו זהה ל־if len(stars) > 0:.

challenge icon

אתגר

בינוני

נאפשר למקש הרווח להחזיר כוכב:

  1. בלולאת האירועים, כשמתקבל אירוע KEYDOWN עבור K_SPACE, נסיר את הכוכב החדש ביותר באמצעות stars.pop().
  2. נבצע pop רק כשהרשימה אינה ריקה, כדי שלחיצה על מקש הרווח כשאין כוכבים לא תעשה דבר.

נסו בעצמכם

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()

# הגדירו כאן את הדברים, לפני לולאת המשחק.
stars = []
font = pygame.font.Font(None, 36)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN and len(stars) < 10:
            stars.append(event.pos)

    # שנו כאן את הדברים, פעם אחת בכל פריים.

    screen.fill((20, 24, 48))
    # ציירו כאן, אחרי מילוי המסך.
    for star in stars:
        pygame.draw.circle(screen, (255, 255, 255), star, 5)
    text = font.render(f"Stars: {len(stars)}", True, (230, 230, 240))
    screen.blit(text, (20, 20))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

כל השיעורים ביחידה Python בחלון משחק

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