用Python画会飘落的樱花树(附完整源代码)

一、效果展示先睹为快

运行代码后你会看到这样的场景:

  1. 深蓝色的夜空背景下
  2. 一棵开满粉色樱花的树缓缓生长
  3. 花瓣随机飘落效果(效果超酷!)
  4. 动态绘制过程清晰可见

(建议先跑代码再看原理讲解,体验更直观)

二、准备你的Python环境

2.1 必需库安装

打开cmd/powershell输入:

pip install turtle

(没错!这个炫酷的效果只需要内置turtle库)

2.2 代码编辑器选择

推荐使用:

  • VSCode(记得安装Python插件)
  • PyCharm社区版
  • 甚至记事本都可以!

三、完整源代码(带详细注释)

import turtle as t
import random

# 初始化画布
t.setup(800, 600)  # 窗口尺寸
t.bgcolor('navy')  # 背景色
t.title('Python樱花树')  # 窗口标题
t.hideturtle()     # 隐藏乌龟光标
t.speed(0)         # 最快绘制速度
t.pensize(2)       # 树枝粗细

# 花瓣容器(后面动画要用)
petals = []

def draw_tree(level, length):
    """递归画树枝"""
    if level > 0:
        # 画右侧分支
        t.right(20)
        t.forward(length)
        draw_tree(level-1, length*0.8)
        
        # 画左侧分支
        t.backward(length)
        t.left(40)
        t.forward(length)
        draw_tree(level-1, length*0.8)
        
        # 回退到父节点
        t.backward(length)
        t.right(20)

def create_petal():
    """创建单个花瓣"""
    p = t.Turtle()
    p.penup()
    p.shape('circle')
    p.shapesize(0.3)
    p.color('#FFB6C1')  # 浅粉色
    p.speed(0)
    p.goto(random.randint(-300, 300), 300)
    p.dy = random.uniform(0.1, 0.5)  # 下落速度
    p.dx = random.uniform(-0.2, 0.2) # 横向飘动
    return p

def animate_petals():
    """花瓣飘落动画"""
    while True:
        # 随机添加新花瓣
        if random.random() < 0.2:
            petals.append(create_petal())
        
        # 更新所有花瓣位置
        for p in petals:
            p.sety(p.ycor() - p.dy)
            p.setx(p.xcor() + p.dx)
            
            # 超出屏幕则重置
            if p.ycor() < -300:
                p.goto(random.randint(-300, 300), 300)
        
        t.update()  # 更新画面

if __name__ == '__main__':
    t.tracer(0)  # 关闭自动刷新
    t.left(90)   # 初始方向调整
    t.penup()
    t.goto(0, -200)
    t.pendown()
    t.color('sienna')  # 树干颜色
    
    # 开始绘制!
    draw_tree(8, 100)  # 参数控制树的分支复杂度
    
    # 启动花瓣动画
    animate_petals()

四、核心代码解析(重点!)

4.1 递归画树原理

def draw_tree(level, length):
    if level > 0:
        # 向右画分支
        t.right(20)
        t.forward(length)
        draw_tree(level-1, length*0.8)
        
        # 向左画分支
        t.backward(length)
        t.left(40)
        t.forward(length)
        draw_tree(level-1, length*0.8)
        
        # 回到原点
        t.backward(length)
        t.right(20)

(递归层级示意图)
level=3时的绘制路径:

  1. 主树干 → 右分支 → 右右分支 → 回退
  2. → 左分支 → 左右分支 → 回退
  3. 依次类推…

4.2 花瓣动画技巧

def animate_petals():
    while True:
        # 随机生成新花瓣
        if random.random() < 0.2:
            petals.append(create_petal())
        
        # 更新位置
        for p in petals:
            p.sety(p.ycor() - p.dy)  # y轴下落
            p.setx(p.xcor() + p.dx)  # x轴飘动

(关键点解析)

  • random.random()<0.2 控制花瓣生成频率
  • dy控制下落速度,dx控制左右飘动幅度
  • 无限循环实现持续动画

五、个性化定制指南(必看!)

5.1 修改树的外观

参数位置可调整值效果说明
draw_tree(8, 100)第一个参数调为5-10树枝复杂度(小心卡顿!)
t.color(‘sienna’)‘peru’,‘#654321’树干颜色
t.pensize(2)1-5树枝粗细

5.2 调整花瓣效果

# 修改这两个参数:
p.shapesize(0.3)  # 花瓣大小
p.color('#FFB6C1') # 颜色代码

# 飘动参数调整:
p.dy = random.uniform(0.1, 0.5)  # 下落速度
p.dx = random.uniform(-0.2, 0.2) # 横向飘动

(颜色推荐)

  • 樱花粉:#FFB6C1
  • 桃花粉:#FF69B4
  • 梅花红:#DC143C

六、常见问题解决

6.1 窗口闪退怎么办?

在代码最后加:

t.done()  # 保持窗口打开

6.2 动画卡顿怎么处理?

尝试:

  1. 降低递归层级(把draw_tree的8改为6)
  2. 减少同时存在的花瓣数量(修改random.random()<0.2中的0.2为更小值)

6.3 想保存为GIF?

安装额外库:

pip install pillow

然后在代码开头添加:

from PIL import ImageGrab

七、创意扩展建议

发挥你的想象力:

  • 在树下添加秋千(用turtle画矩形和圆)
  • 增加星空背景(随机画白色小点)
  • 让花瓣点击变色(绑定鼠标事件)
  • 添加背景音乐(需要pygame库支持)

(动手试试看!遇到问题欢迎评论区交流~)

本文代码在Windows11+Python3.9环境下测试通过,如遇运行问题请检查缩进和标点符号。创作不易,如果对你有帮助,欢迎分享给更多朋友!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值