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

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)

关键修改说明

  1. 替换嵌套while为if/elif:保证每次主循环只会根据当前mistakes值执行一次绘制逻辑,不会陷入死循环。
  2. 补充black颜色定义:解决变量未定义的报错。
  3. 调整事件处理位置:放到主循环内,确保程序始终能响应用户输入和窗口关闭事件。
  4. 添加背景填充:避免多次绘制的内容重叠,保持画面整洁。
  5. 加入帧率控制:通过clock.tick(60)限制帧率,降低CPU占用,提升程序稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:45:42