Menu
CoddyTech

闪烁

本课属于 Coddy Pygame 学习旅程的“游戏窗口中的 Python”单元。第 31 课,共 33 课。

真实的星星会闪烁。这里,每颗星星偶尔会随机变暗一帧。在每一帧中,每颗星星都会生成一个 1 到 30 的数字,生成 1 时就以较暗的颜色绘制:

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 初始值都是白色,只有生成 1 时,if 才会改变它。每颗星星平均每 30 帧变暗一次,也就是大约每秒两次。每颗星星生成的数字各不相同,所以它们会在不同的时刻闪烁。这种细微而不规则的变化,让天空看起来充满生机。

在程序顶部添加 import random。这里要在绘制循环中生成随机数,因为每一帧都要为每颗星星重新做一次选择。

challenge icon

挑战

中等

让星星闪烁。

  1. 在顶部添加 import random。
  2. 在星星循环中,将每颗星星的 colour 设为白色 (255, 255, 255),并在 random.randint(1, 30) == 1 时,将其设为暗淡的 (110, 120, 170)。
  3. 使用 colour 绘制星星。

按“运行”,放置一些星星:它们现在会时不时闪烁。然后按“检查”。

亲手试试

import pygame

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

# 在这里进行设置,放在游戏循环之前。
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)

    # 每帧在这里更新内容。

    screen.fill((20, 24, 48))
    # 填充背景后,在这里绘制。
    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()

游戏窗口中的 Python中的所有课

自己练习: Pygame 在线编辑器