أزِل نجمة
جزء من قسم 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(). - لا تُزل نجمة إلا عندما لا تكون القائمة فارغة، حتى لا يفعل الضغط على مفتاح المسافة شيئًا إذا لم تكن هناك نجوم.
جرّب بنفسك
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 في نافذة لعبة
تدرّب بنفسك: Playground لـ Pygame