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. لا تُزل نجمة إلا عندما لا تكون القائمة فارغة، حتى لا يفعل الضغط على مفتاح المسافة شيئًا إذا لم تكن هناك نجوم.

جرّب بنفسك

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