You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

蛇触碰食物后旧食物为何消失?无擦除函数的技术疑问

问题与代码解析

相关代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:30:05