Menu
CoddyTech

数一数星星

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

玩家需要知道天空距离满天有多近。在左上角显示二十颗星中的当前数量:

text = font.render(f"Stars: {len(stars)}/20", True, (230, 230, 240))
screen.blit(text, (20, 20))

这个 f 字符串将一个值 len(stars) 和纯文本 /20 混合在一起。有七颗星时,显示为 Stars: 7/20。

在设置部分创建字体,放在 stars = [] 旁边。创建字体时会加载字体,这需要时间,所以只创建一次。渲染文本的开销很小,并且每一帧都会执行,因此数量始终是最新的。

在绘制部分的最后绘制标签,这样星星就不会挡住它。

challenge icon

挑战

简单

显示天空中有多少颗星星。

  1. 在设置部分,创建 font = pygame.font.Font(None, 36)。
  2. 在绘制部分的末尾,用 (230, 230, 240) 渲染 f"Stars: {len(stars)}/20",并将它绘制在 (20, 20) 位置。

按“开始”并点击:计数会从 Stars: 0/20 开始增加。然后按“检查”。

亲手试试

import random
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:
        colour = (255, 255, 255)
        if random.randint(1, 30) == 1:
            colour = (110, 120, 170)
        pygame.draw.circle(screen, colour, star, 3)

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

pygame.quit()

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

自己练习: Pygame 在线编辑器