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

如何实现Tracy的DVD屏保式边缘反弹?代码问题求助

问题分析与解决方案

你的代码核心问题在于移动循环的条件逻辑错误:原代码用or连接坐标判断,导致只要任意一个坐标还在屏幕范围内,Tracy就会继续移动,直到完全超出屏幕才停止。

修正步骤

  1. 修正循环条件:将or替换为and,只有当Tracy的x坐标在[-200, 200]范围内且y坐标在[-200, 200]范围内时,才继续移动。
  2. 补充细节优化:移出屏幕后抬笔,避免下次调整角度时留下多余线条。

修正后的基础版代码

def background():
    speed(1)
    pensize(5)
    line_count = 0
    while line_count < 101:
        color(random.choice(color_list))
        left(random.choice(angle_list))
        pendown()
        # 修正条件:同时满足x和y在屏幕内才继续移动
        while (-200 <= xcor() <= 200) and (-200 <= ycor() <= 200):
            forward(1)
        penup()  # 移出屏幕后抬笔,避免后续移动留痕
        line_count += 1

进阶优化(精准停在屏幕边缘)

如果希望Tracy刚好碰到边缘就停止,而非移出一点,可以提前计算下一步坐标,预判是否超出范围:

import math

def background():
    speed(1)
    pensize(5)
    line_count = 0
    while line_count < 101:
        color(random.choice(color_list))
        angle = random.choice(angle_list)
        left(angle)
        pendown()
        while True:
            # 计算下一步的x、y坐标(基于当前朝向)
            next_x = xcor() + math.cos(math.radians(heading())) * 1
            next_y = ycor() + math.sin(math.radians(heading())) * 1
            # 若下一步超出屏幕则停止循环
            if not (-200 <= next_x <= 200 and -200 <= next_y <= 200):
                break
            forward(1)
        penup()
        line_count += 1

内容的提问来源于stack exchange,提问作者Samuel Maurer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:14:59