微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我需要这段代码中的 time.sleep(x) 函数才能工作?

如何解决为什么我需要这段代码中的 time.sleep(x) 函数才能工作?

from turtle import Screen,Turtle
import time
import snake

MOVE_disTANCE = 20


UP = 90
DOWN = 270
LEFT = 180
RIGHT = 0


class InitialSnake:

    def __init__(self):
        self.number_x = 0
        self.snake_first = []
        self.create_snake()
        self.actual_snake = self.snake_first[0]

    def create_snake(self):
        for number in range(3):
            snake = Turtle(shape="square")
            snake.penup()
            snake.color("white")
            snake.goto(self.number_x,0)
            self.number_x -= 20
            self.snake_first.append(snake)

    def move(self):
        for segments_num in range(len(self.snake_first) - 1,-1):
            self.snake_first[segments_num].goto(self.snake_first[segments_num - 1].xcor(),self.snake_first[segments_num - 1].ycor())
        self.snake_first[0].forward(MOVE_disTANCE)

    def up(self):
        if self.actual_snake.heading() != DOWN:
            self.snake_first[0].setheading(UP)
    def down(self):
        if self.actual_snake.heading() != UP:
            self.snake_first[0].setheading(DOWN)
    def left(self):
        if self.actual_snake.heading() != RIGHT:
            self.snake_first[0].setheading(LEFT)
    def right(self):
        if self.actual_snake.heading() != LEFT:
            self.snake_first[0].setheading(RIGHT)


my_screen = Screen()
my_screen.setup(width=600,height=600)
my_screen.bgcolor("black")
my_screen.title("Snake Game")
my_screen.tracer(0)
snake_1 = snake.InitialSnake()

#snake_here.create_snake()

game_is_on = True

my_screen.listen()
my_screen.onkey(snake_1.up,"Up")
my_screen.onkey(snake_1.down,"Down")
my_screen.onkey(snake_1.left,"Left")
my_screen.onkey(snake_1.right,"Right")

while game_is_on:
    my_screen.update()
    time.sleep(0.1)

    snake_1.move()


my_screen.exitonclick()

我并没有真正理解跟踪器和更新的概念以及它如何与睡眠功能相关联。我知道当跟踪器被调用关闭时,它不会刷新屏幕,直到您调用 update() 函数。但是它不应该在没有 time.sleep(0.1) 的情况下仍然工作,因为这只是在调用一个函数之前创建一个短暂的延迟。有人可以帮我理解这一点吗?提前致谢 (:

解决方法

如果使用 print() 查看蛇的位置

while game_is_on:
    my_screen.update()
    snake_1.move()

    print(snake_1.snake_first[0].ycor(),snake_1.snake_first[0].xcor())

然后你会看到它移动得非常非常快并且离开了屏幕——而你根本看不到它。

几毫秒后,在我非常旧的计算机上,它的位置是 (0,125700)。可能在最新的计算机上它会更有价值。

所以这段代码使用 sleep() 来减慢 snake 并在所有计算机上以相同的速度移动它。


顺便说一句:

我会使用 turtle 方法来重复代码

def game_loop():
    snake_1.move()
    my_screen.update()
    my_screen.ontimer(game_loop,100)  # repeate after 100ms (0.1s)

# start loop       
game_loop()

因为 sleep 可能会阻塞一些代码,而 ontimer 是为非阻塞延迟而创建的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。