Menu
CoddyTech

Xóa một ngôi sao

Thuộc phần Python trong cửa sổ trò chơi trong hành trình Pygame của Coddy. Bài học 28 trên 33.

Danh sách cũng thu nhỏ lại. stars.pop() xóa phần tử cuối cùng, phần tử mới nhất. stars.pop(0) xóa phần tử đầu tiên. stars.remove(item) xóa phần tử đầu tiên có giá trị bằng item.

Lấy phần tử khỏi một danh sách rỗng sẽ gây lỗi, IndexError: pop from empty list, và chương trình sẽ dừng. Hãy kiểm tra độ dài trước:

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

Lưu ý có hai câu lệnh if. Câu lệnh bên ngoài chọn sự kiện nhấn phím Space, còn câu lệnh bên trong đảm bảo có một ngôi sao để xóa.

Trong câu lệnh if, một danh sách rỗng được xem là False, còn danh sách có phần tử được xem là True, vì vậy if stars: có nghĩa giống như if len(stars) > 0:.

challenge icon

Thử thách

Trung bình

Nhấn phím Space để xóa ngôi sao mới nhất.

  1. Trong vòng lặp sự kiện, khi có sự kiện KEYDOWN cho K_SPACE, xóa ngôi sao mới nhất bằng stars.pop().
  2. Chỉ xóa khi danh sách không rỗng, để nhấn Space khi không có ngôi sao nào cũng không làm gì.

Nhấn "Chơi", nhấp vào vài ngôi sao, rồi nhấn Space: ngôi sao mới nhất sẽ biến mất. Sau đó nhấn "Kiểm tra".

Tự làm thử

import pygame

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

# Thiết lập mọi thứ ở đây, trước vòng lặp trò chơi.
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)

    # Thay đổi mọi thứ ở đây, mỗi khung hình một lần.

    screen.fill((20, 24, 48))
    # Vẽ ở đây, sau khi tô nền.
    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()

Tất cả bài học trong Python trong cửa sổ trò chơi

Tự luyện tập: Playground Pygame