You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pygame中每隔2秒依次显示列表中的随机元素

Pygame 定时切换随机列表项实现方案

核心问题说明

  • 直接使用time.sleep()会阻塞Pygame主循环,导致事件响应、界面刷新功能全部暂停,所以看不到定时切换效果
  • 原代码中random_place仅在初始化时生成一次,运行过程中不会自动更新内容
  • 字体初始化放在渲染函数内会重复加载资源,影响运行性能

优化后实现代码

使用Pygame内置的定时器事件实现,不会阻塞主循环运行:

import pygame
import pygame.freetype
import random

# 地点列表
places = ["London", "India", "America", "Australia", "Cambodia", "China", 
          "Dubai", "Egypt",  "France", "Germany", "Japan", "Jordan", 
          "Korea", "Myanmar", "Peru", "Russia", "Singapore", "Spain"]

# 初始化Pygame基础配置
pygame.init()
# 可根据实际需求修改窗口尺寸
screen = pygame.display.set_mode((1280, 720))
# 自定义定时切换地点的事件类型
CHANGE_PLACE_EVENT = pygame.USEREVENT + 1
# 设置每2000毫秒(2秒)触发一次切换事件
pygame.time.set_timer(CHANGE_PLACE_EVENT, 2000)
# 全局初始化字体,避免重复加载
game_font = pygame.freetype.SysFont("monospace", 35)
# 初始化第一个要显示的随机地点
current_place = random.choice(places)

def render_text(content):
    text_surface, rect = game_font.render(content, (0, 0, 0))
    screen.blit(text_surface, (680, 420))

def card():
    # 保留你原有card函数的逻辑即可
    pass

# 主循环
running = True
while running:
    screen.fill((255, 194, 102))
    # 事件监听
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # 监听定时切换事件,更新当前显示的地点
        if event.type == CHANGE_PLACE_EVENT:
            current_place = random.choice(places)
    
    card()
    render_text(current_place)
    pygame.display.update()

pygame.quit()

扩展说明

如果需要避免短时间内重复显示同一个地点,可以在生成随机项时增加去重判断,比如记录上一次显示的地点,重新生成直到和上一次不同即可。

内容的提问来源于stack exchange,提问作者Shreyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:45:03