Pygame绘制多条直线时程序无响应问题求助
问题修复:Pygame添加直线后程序无响应
你的程序卡死的核心原因是嵌套的while循环形成了死循环,当mistakes等于1或2时,程序会一直卡在这个循环里,既不处理用户事件,也无法推进逻辑,系统直接判定程序无响应。另外代码还有几处小问题需要修正:
具体问题点
- 嵌套
while逻辑错误:比如while mistakes == 1会无限重复执行,循环内既没有改变mistakes的值,也没有处理Pygame的事件队列,导致程序彻底卡住。 - 缺失
black颜色定义:代码中使用了black作为线条颜色,但从未定义这个变量,运行时会抛出NameError。 - 事件处理位置不当:事件循环放在嵌套
while之后,导致嵌套循环运行时完全无法响应用户输入。
修复后的代码
import pygame pygame.init() w = 800 h = 800 dis = pygame.display.set_mode((w, h)) pygame.display.set_caption("Hangman") # 补充缺失的颜色定义 white = (255, 255, 255) black = (0, 0, 0) mistakes = 0 clock = pygame.time.Clock() while mistakes < 11: # 先填充背景(避免绘制内容重叠混乱) dis.fill(white) # 把嵌套while改成if,每次主循环只执行一次绘制逻辑 if mistakes == 1: pygame.draw.line(dis, black, [100, 500], [700, 500], 5) elif mistakes == 2: pygame.draw.line(dis, black, [100, 500], [700, 500], 5) pygame.draw.line(dis, black, [100, 500], [100, 100], 5) # 事件处理放到主循环内,确保每次循环都能响应输入 for event in pygame.event.get(): # 必须处理QUIT事件,否则无法正常关闭窗口 if event.type == pygame.QUIT: pygame.quit() exit() if event.type == pygame.KEYDOWN: mistakes += 1 pygame.display.update() # 控制帧率,避免过度占用CPU clock.tick(60)
关键修改说明
- 替换嵌套
while为if/elif:保证每次主循环只会根据当前mistakes值执行一次绘制逻辑,不会陷入死循环。 - 补充
black颜色定义:解决变量未定义的报错。 - 调整事件处理位置:放到主循环内,确保程序始终能响应用户输入和窗口关闭事件。
- 添加背景填充:避免多次绘制的内容重叠,保持画面整洁。
- 加入帧率控制:通过
clock.tick(60)限制帧率,降低CPU占用,提升程序稳定性。
内容的提问来源于stack exchange,提问作者Michaelvv
相关产品推荐
相关产品推荐

