对于从Python中的turtle模块创建的类(snake类):
问题1。 当调用 move() 方法时,蛇段向后移动而不是向前移动。问题似乎是每个方法中调用的返回函数(我认为是),其中调用了蛇的原始位置,因此它无法向前移动
通过删除positions()方法中的返回函数解决了这个问题,但是当屏幕短暂打开和关闭时出现了新问题,故障可能出在move()方法上 [即,在这一行中,snake_segments = self.segments()]
给出了问题 1 的代码、问题 2 的修复以及 main.py 代码
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)
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)
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()
我不使用海龟,但读了你的文章,我有这个想法:段应该是一个全局变量?在这里你失去了价值观。 请参阅:screen.update 返回错误(Python Turtle 模块)