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

Pygame贪吃蛇time.sleep()致游戏冻结时重启、退出按钮放置问题

问题根源

你当前遇到的按钮无法点击问题有两个核心原因:

  1. time.sleep() 会直接阻塞整个程序线程,执行期间pygame无法处理任何鼠标、键盘输入事件,也不会刷新界面,所有点击操作都会被忽略,等2秒延迟结束程序就直接退出了,自然不会响应按钮操作。
  2. 你只在主游戏循环结束后绘制检测了一次按钮,没有为游戏结束状态单独做事件循环,就算去掉sleep也几乎捕捉不到用户的点击动作。

修复方案

直接替换原main函数末尾、主游戏循环结束后的代码即可:

# 原有主游戏循环内容不变,以下是循环结束后的代码
    game_over_message("Game Over!", BLACK)
    GAME_OVER_SOUND.play()
    pygame.display.update()

    # 新增游戏结束状态循环,处理按钮交互
    game_over_running = True
    while game_over_running:
        # 必须持续处理事件队列,否则界面会无响应
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over_running = False
                pygame.quit()
                exit()
        
        # 每次循环重绘按钮并检测点击
        if again.draw_button():
            game_over_running = False
            SNAKE_LIST.clear() # 清空上一局的蛇身数据,避免新局误判碰撞
            main()
        if quit.draw_button():
            game_over_running = False
            pygame.quit()
            exit()
        
        pygame.display.update()
        CLOCK.tick(15) # 结束界面不需要高帧率,降低资源占用

删除原代码末尾的time.sleep(2)相关逻辑即可,不需要用sleep来避免程序自动退出,新增的循环会一直运行直到用户点击按钮或者关闭窗口。

注意事项

重启游戏前一定要清空全局存储蛇身的SNAKE_LIST,否则上一局的蛇身数据会残留,新局开局就会触发撞自身的游戏结束判定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:27:00