对于从Pythonturtle模块创建的类,不是每个方法都返回函数,而是如何在不同的方法中使用从一个方法创建的数据?

问题描述 投票:0回答:1

对于从Python中的turtle模块创建的类(snake类):

问题1。 当调用 move() 方法时,蛇段向后移动而不是向前移动。问题似乎是每个方法中调用的返回函数(我认为是),其中调用了蛇的原始位置,因此它无法向前移动

通过删除positions()方法中的返回函数解决了这个问题,但是当屏幕短暂打开和关闭时出现了新问题,故障可能出在move()方法上 [即,在这一行中,snake_segments = self.segments()]

给出了问题 1 的代码、问题 2 的修复以及 main.py 代码

问题1(蛇段向后而不是向前移动):

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(屏幕打开和关闭)

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()
python oop turtle-graphics python-turtle python-class
1个回答
0
投票

我不使用海龟,但读了你的文章,我有这个想法:段应该是一个全局变量?在这里你失去了价值观。 请参阅:screen.update 返回错误(Python Turtle 模块)

© www.soinside.com 2019 - 2024. All rights reserved.