蛇触碰食物后旧食物为何消失?无擦除函数的技术疑问
问题与代码解析
相关代码
food.py
#food.py from turtle import Turtle import random class Food(Turtle): def __init__(self): super().__init__() self.shape("square") self.penup() self.shapesize(stretch_len= 0.5, stretch_wid= 0.5) self.color("navy") self.speed("fastest") self.refresh() def refresh(self): random_x = random.randint(-280, 280) random_y = random.randint(-280, 280) self.goto(random_x, random_y)
main.py
#main.py is_on = True while is_on: screen.update() time.sleep(0.1) snake.move() if snake.segment[0].distance(food) < 15: food.refresh()
问题解答
你疑惑的旧食物消失,核心原因是:整个游戏里只有一个食物Turtle实例。
你创建的food对象是Food类的唯一实例,它本质就是一个Turtle。当调用refresh()里的self.goto()时,这个Turtle实例只是从原来的位置移动到了新的随机坐标——turtle库的机制是,一个Turtle对象的图形只会显示在它当前的坐标位置,当它移动后,旧位置的图形会自动被清除,根本不需要额外的擦除函数。
简单说,不是生成了新食物、删除了旧食物,而是同一个食物“瞬移”到了新位置,旧位置自然就看不到它了。
内容的提问来源于stack exchange,提问作者i-wanna-stay-at-your-house
相关产品推荐
相关产品推荐

