数一数星星
本课属于 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 = [] 旁边。创建字体时会加载字体,这需要时间,所以只创建一次。渲染文本的开销很小,并且每一帧都会执行,因此数量始终是最新的。
在绘制部分的最后绘制标签,这样星星就不会挡住它。
挑战
简单显示天空中有多少颗星星。
- 在设置部分,创建
font = pygame.font.Font(None, 36)。 - 在绘制部分的末尾,用
(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 在线编辑器