Menu
CoddyTech

Bầu trời đầy 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 33 trên 33.

Trò chơi kết thúc khi bầu trời có hai mươi ngôi sao. Hai điều thay đổi: nhấp chuột không thêm sao nữa, và một thông báo cho biết điều đó. Cả hai đều đọc cùng một danh sách:

if event.type == pygame.MOUSEBUTTONDOWN and len(stars) < 20:
    stars.append(event.pos)
if len(stars) == 20:
    message = font.render("The sky is full!", True, (230, 230, 240))
    screen.blit(message, message.get_rect(center=(320, 240)))

message.get_rect(center=(320, 240)) là hình chữ nhật bao quanh hình ảnh văn bản, được đặt sao cho tâm nằm ở (320, 240). Vẽ văn bản lên đó sẽ đặt văn bản ở chính giữa cửa sổ, dù độ dài của văn bản là bao nhiêu.

Ở đây, hãy kiểm tra == 20, không phải > 20: giới hạn dừng danh sách ở 20, nên danh sách không bao giờ chứa nhiều hơn.

Khi bầu trời đã đầy, bạn chỉ còn việc ngắm nhìn. Phần 2 hướng dẫn cách bắt đầu lại trò chơi bằng một phím, và cách kết thúc trò chơi với chiến thắng hoặc thất bại.

challenge icon

Thử thách

Trung bình

Hoàn thành Night Sky: bầu trời có 20 ngôi sao.

  1. Chỉ thêm một ngôi sao khi nhấp chuột và len(stars) < 20.
  2. Khi len(stars) == 20, hiển thị The sky is full! bằng (230, 230, 240), căn giữa tại (320, 240).

Nhấn Chơi và nhấp chuột 20 lần: The sky is full! sẽ xuất hiện. Sau đó nhấn Kiểm tra.

Tự làm thử

import random
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:
            stars.append(event.pos)

    # Cập nhật mọi thứ ở đây sau mỗi khung hình.

    screen.fill((20, 24, 48))
    # Vẽ ở đây, sau khi tô nền.
    pygame.draw.circle(screen, (240, 230, 160), (560, 80), 40)
    pygame.draw.rect(screen, (14, 16, 30), (0, 430, 640, 50))
    for star in stars:
        colour = (255, 255, 255)
        if random.randint(1, 30) == 1:
            colour = (110, 120, 170)
        pygame.draw.circle(screen, colour, star, 3)
    text = font.render(f"Stars: {len(stars)}/20", True, (230, 230, 240))
    screen.blit(text, (20, 20))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

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

Tự luyện tập: Playground Pygame