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

