Pygame贪吃蛇time.sleep()致游戏冻结时重启、退出按钮放置问题
问题根源
你当前遇到的按钮无法点击问题有两个核心原因:
time.sleep()会直接阻塞整个程序线程,执行期间pygame无法处理任何鼠标、键盘输入事件,也不会刷新界面,所有点击操作都会被忽略,等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
相关产品推荐
相关产品推荐

