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

基于Python Turtle模块的Snake类移动异常及屏幕闪关问题排查

Python Turtle 蛇类实现的两个技术问题及对应代码

问题说明

  • 问题1:调用move()方法时,蛇段反向移动而非正向移动,推测是各方法中的return语句导致重复调用蛇的初始位置,无法正常向前移动。
  • 问题2:移除positions()方法中的return语句后解决了反向移动问题,但出现新故障:程序运行后屏幕短暂打开立即关闭,推测问题出在move()方法的snake_segments = self.segments()这一行。

问题1(蛇段反向移动)对应的Snake类代码

from turtle import Turtle

class Snake:

    def __init__(self):
        self.x = 0
        self.y = 0

    def positions(self):
        start_pos = []

        for _ in range(0, 3):
            start_pos.append((self.x, self.y))
            self.x -= 20
     
        return start_pos


    def segments(self):
        new_positions = self.positions()

        snake_segments = []

        for cord in new_positions:
            new_turtle = Turtle()
            new_turtle.penup()
            new_turtle.shape("square")
            new_turtle.color("white")
            self.x = cord[0]
            self.y = cord[1]
            new_turtle.goto(x=self.x, y=self.y)
            snake_segments.append(new_turtle)

        return snake_segments

    def move(self):
        snake_segments = self.segments()       

        for segment_index in range(len(snake_segments) - 1, 0, -1):

            new_x = snake_segments[segment_index - 1].xcor()
            new_y = snake_segments[segment_index - 1].ycor()
            snake_segments[segment_index].goto(new_x, new_y)

        snake_segments[0].forward(20)

修复问题1后出现问题2(屏幕闪关)的Snake类代码

from turtle import Turtle


class Snake:

    def __init__(self):
        self.x = 0
        self.y = 0

    def positions(self):
        start_pos = []

        for _ in range(0, 3):
            start_pos.append((self.x, self.y))
            self.x += 20

        self.segments(start_pos)

    def segments(self, start_pos):
        # new_positions = self.start_pos

        snake_segments = []

        for cord in start_pos:
            new_turtle = Turtle()
            new_turtle.penup()
            new_turtle.shape("square")
            new_turtle.color("white")
            self.x = cord[0]
            self.y = cord[1]
            new_turtle.goto(x=self.x, y=self.y)
            snake_segments.append(new_turtle)

        return snake_segments

    def move(self):
        snake_segments = self.segments()
        #print(snake_segments)

        for segment_index in range(len(snake_segments) - 1, 0, -1):

            new_x = snake_segments[segment_index - 1].xcor()
            new_y = snake_segments[segment_index - 1].ycor()
            snake_segments[segment_index].goto(new_x, new_y)

        snake_segments[0].forward(20)

主程序main.py代码

from turtle import Screen, Turtle
import time
from snake import Snake
screen = Screen() 
screen.setup(width=600, height=600) 
screen.bgcolor("black") 
screen.title("My Snake Game") 
screen.tracer(0)

snake = Snake()

game_is_on = True

while game_is_on: 
      screen.update()
      time.sleep(0.5)
      snake.move()

screen.exitonclick()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:22:47