הסרת כוכב
חלק מהיחידה 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:.
אתגר
בינונינאפשר למקש הרווח להחזיר כוכב:
- בלולאת האירועים, כשמתקבל אירוע
KEYDOWNעבורK_SPACE, נסיר את הכוכב החדש ביותר באמצעותstars.pop(). - נבצע 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 אונליין