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
相关产品推荐
相关产品推荐

