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

Python基于Turtle的贪吃蛇项目第二部分代码不执行问题求助

问题原因
  • Turtle_Skin.py末尾的screen.exitonclick()是阻塞调用,代码执行到此处会暂停等待用户点击窗口,后续控制逻辑完全无法触发,这是核心故障原因
  • 导入逻辑不合理:全局代码直接执行阻塞逻辑,主循环入口分散,重复调用positions_goto()
  • screen.tracer(1)开启了自动刷新,和后续手动调用screen.update()冲突,会导致移动卡顿
修复方案

1. 调整Turtle_Skin.py

删除末尾阻塞的screen.exitonclick(),调整tracer参数为0实现手动控制刷新:

from turtle import *

screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.title("Snake_Food_Game")
screen.tracer(0)  # 关闭自动刷新,手动控制更流畅
Baby_Turtle = Turtle()
Mommy_Turtle = Turtle()
Daddy_Turtle = Turtle()

All_Turtles = [Baby_Turtle, Mommy_Turtle, Daddy_Turtle]

for turtle in All_Turtles:
    turtle.shape("square")
    turtle.pencolor("white")
    turtle.color("white")
    turtle.penup()  # 统一添加抬笔逻辑,避免后续重复调用


def positions_goto():
    Daddy_Turtle.goto(x=-40, y=0)
    Mommy_Turtle.goto(x=-20, y=0)
    Baby_Turtle.goto(x=0, y=0)  # 补全小蛇头初始位置

2. 调整Turtle_Control.py

将移动逻辑封装为函数,避免导入时直接执行:

from Turtle_Skin import *
import time

def snake_move():
    is_on = True
    while is_on:
        screen.update()
        time.sleep(0.1)

        for part_num in range(len(All_Turtles) - 1, 0, -1):
            xcord = All_Turtles[part_num - 1].xcor()
            ycord = All_Turtles[part_num - 1].ycor()
            All_Turtles[part_num].goto(x=xcord, y=ycord)
        Baby_Turtle.forward(20)

3. 调整main.py

统一程序入口,把阻塞的screen.exitonclick()放在逻辑末尾:

from Turtle_Skin import *
from Turtle_Control import *

# 初始化蛇身位置
positions_goto()
# 启动移动逻辑
snake_move()
# 所有逻辑结束后等待用户点击关闭窗口
screen.exitonclick()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:48:04