临时用-临时用

import turtle
import random
import time

# --- 设置画布和画笔 ---
screen = turtle.Screen()
screen.setup(width=900, height=700)  # 增大画布尺寸
screen.bgcolor("black")  # 设置背景为黑色
screen.title("Tree")
screen.tracer(0)  # 关闭动画,手动控制刷新

pen = turtle.Turtle()
pen.hideturtle()  # 隐藏画笔
pen.speed(0)
pen.color("brown")
pen.pensize(2)
pen.left(90)  # 将画笔朝上


def draw_tree(branch_length, pen, level):
    if level > 0:
        pen.forward(branch_length)
        screen.update()
        time.sleep(0.005)

        # 记录当前位置和角度
        current_pos = pen.pos()
        current_heading = pen.heading()
        angle = 25 + random.uniform(-10, 10)

        # --- 绘制右侧树枝 ---
        pen.right(angle)
        draw_tree(branch_length * random.uniform(0.75, 0.85), pen, level - 1)

        # --- 返回并绘制左侧树枝 ---
        pen.penup()
        pen.goto(current_pos)
        pen.setheading(current_heading)
        pen.pendown()
        pen.left(angle)
        draw_tree(branch_length * random.uniform(0.75, 0.85), pen, level - 1)

        # --- 返回到上一层树枝 ---
        pen.penup()
        pen.goto(current_pos)
        pen.setheading(current_heading)
        pen.pendown()

        if level <= 3 and random.random() > 0.6:
            heart_locations.append(pen.pos())


def draw_heart(x, y, size):
    heart_pen_local = turtle.Turtle()
    heart_pen_local.hideturtle()
    heart_pen_local.speed(0)
    heart_pen_local.penup()
    heart_pen_local.goto(x, y)
    heart_pen_local.pendown()

    heart_pen_local.color("crimson", "pink")
    heart_pen_local.begin_fill()

    heart_pen_local.left(140)
    heart_pen_local.forward(size * 11.65)
    for _ in range(200):
        heart_pen_local.right(1)
        heart_pen_local.forward(size * 0.1)
    heart_pen_local.left(120)
    for _ in range(200):
        heart_pen_local.right(1)
        heart_pen_local.forward(size * 0.1)
    heart_pen_local.forward(size * 11.65)

    heart_pen_local.end_fill()
    heart_pen_local.setheading(90)

    heart_pen_local.penup()
    heart_pen_local.goto(0, 0)


# --- 主程序 ---
if __name__ == "__main__":
    # 移动画笔到起始位置
    pen.penup()
    pen.goto(0, -300)
    pen.pendown()

    heart_locations = []
    initial_branch_length = 120
    tree_levels = 8

    draw_tree(initial_branch_length, pen, tree_levels)

    while True:
        visible_hearts_count = int(len(heart_locations) * 0.7)
        visible_hearts = random.sample(heart_locations, k=visible_hearts_count)

        for pos in visible_hearts:
            draw_heart(pos[0], pos[1], 1)

        screen.update()
        time.sleep(0.5)  # 闪烁间隔

        heart_pen_global = turtle.Turtle()
        heart_pen_global.hideturtle()
        heart_pen_global.speed(0)
        heart_pen_global.clear()

        screen.update()
        time.sleep(0.2)
        heart_pen_global.clear()

    turtle.done()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值