Menu
CoddyTech

Lấp lánh

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 31 trên 33.

Các ngôi sao thật sự nhấp nháy. Ở đây, thỉnh thoảng mỗi ngôi sao mờ đi trong một khung hình, một cách ngẫu nhiên. Trong mỗi khung hình, mỗi ngôi sao chọn một số từ 1 đến 30, và nếu số đó là 1 thì ngôi sao được vẽ mờ:

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)

colour bắt đầu bằng màu trắng cho mỗi ngôi sao, và if chỉ thay đổi màu khi số được chọn là 1. Với mỗi ngôi sao, cứ 30 khung hình thì có một khung hình mờ đi, tức khoảng hai lần mỗi giây. Mỗi ngôi sao tự chọn số riêng, nên chúng nhấp nháy vào những thời điểm khác nhau. Sự thay đổi nhỏ và không đều đó khiến bầu trời trông sống động.

Thêm import random vào đầu chương trình. Ở đây, việc chọn số ngẫu nhiên cần diễn ra trong vòng lặp vẽ vì phải chọn lại ở mỗi khung hình, cho từng ngôi sao.

challenge icon

Thử thách

Trung bình

Làm cho các ngôi sao lấp lánh.

  1. Thêm import random vào đầu.
  2. Trong vòng lặp sao, đặt colour của mỗi ngôi sao thành màu trắng (255, 255, 255), và khi random.randint(1, 30) == 1, đặt thành màu tối (110, 120, 170).
  3. Vẽ ngôi sao bằng colour.

Nhấn “Chơi” rồi đặt vài ngôi sao: thỉnh thoảng chúng sẽ nhấp nháy. 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 = []

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)

    # Thay đổi mọi thứ ở đây sau mỗi khung hình.

    screen.fill((20, 24, 48))
    # Vẽ ở đây, sau khi tô màu 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:
        pygame.draw.circle(screen, (255, 255, 255), star, 3)

    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