Menu
CoddyTech

별 제거하기

Coddy Pygame 여정의 게임 창에서 배우는 Python 섹션에 포함된 레슨. 32개 중 27번째.

목록도 줄어듭니다. 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. 이벤트 루프에서 K_SPACE에 대한 KEYDOWN 이벤트가 발생하면 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의 모든 레슨

직접 연습해 보세요: Pygame 플레이그라운드