文章目录
一、效果预览(美到窒息!)
运行代码后会出现这样的场景↓↓↓
- 粉色樱花树在黑色背景中缓缓生长(像看延时摄影!)
- 树枝末端不断飘落花瓣雨(3D粒子效果绝了)
- 树干会有自然的分叉和弯曲(完全随机生成)
- ESC键可随时暂停/继续动画(截图党福音)
(偷偷说:这个程序拿来当屏保都不过分!)
二、必备武器库
只需Python自带库↓↓↓
import turtle # 绘图界扛把子
import random # 制造随机美感
import time # 控制动画节奏
三、核心代码拆解(手把手教学)
3.1 树枝绘制神器(递归大法好!)
def draw_tree(branch_len, t):
if branch_len > 5:
# 随机抖动角度(让树更自然)
angle = 15 * random.random()
# 树枝变细逻辑(等比缩小)
t.pensize(branch_len/10)
t.forward(branch_len)
t.right(angle)
draw_tree(branch_len * 0.7, t) # 右侧分支
t.left(2*angle)
draw_tree(branch_len * 0.7, t) # 左侧分支
t.right(angle)
t.backward(branch_len)
(关键技巧:递归终止条件别忘写!否则无限循环警告⚠️)
3.2 花瓣粒子系统(动态效果核心)
class Petal:
def __init__(self):
self.x = 0 # 初始位置
self.y = 0
self.vx = 0.02 - random.random()*0.04 # X速度
self.vy = random.random()*0.2 + 0.2 # Y速度
self.age = 0 # 花瓣"寿命"
def update(self):
self.x += self.vx
self.y -= self.vy
self.vy -= 0.001 # 重力加速度
self.age += 1
(参数调优指南:把vy调大能看到龙卷风效果🌀)
四、完整源代码(复制即用)
import turtle
import random
import time
# 初始化画布
t = turtle.Turtle()
screen = turtle.Screen()
screen.bgcolor("black")
t.hideturtle()
t.speed(0)
t.left(90)
t.up()
t.goto(0, -200)
t.down()
# 绘制树干
def draw_tree(branch_len, t):
if branch_len > 5:
angle = 15 * random.random()
t.pensize(branch_len/10)
t.forward(branch_len)
t.right(angle)
draw_tree(branch_len * 0.7, t)
t.left(2*angle)
draw_tree(branch_len * 0.7, t)
t.right(angle)
t.backward(branch_len)
# 花瓣类
petals = []
class Petal:
def __init__(self):
self.x = t.xcor()
self.y = t.ycor()
self.vx = 0.02 - random.random()*0.04
self.vy = random.random()*0.2 + 0.2
self.age = 0
def update(self):
self.x += self.vx
self.y -= self.vy
self.vy -= 0.001
self.age += 1
# 主循环
draw_tree(100, t)
t.up()
t.goto(0, 200)
while True:
# 生成新花瓣
if random.random() < 0.3:
petals.append(Petal())
# 更新花瓣位置
for p in petals[:]:
p.update()
if p.age > 200:
petals.remove(p)
# 重绘画布
t.clear()
for p in petals:
t.goto(p.x, p.y)
t.dot(3, "#FFB3E6")
time.sleep(0.05)
screen.listen()
screen.mainloop()
(运行报错急救包:确保turtle版本最新!)
五、魔改小课堂(放飞你的创意)
- 下雪模式❄️:把花瓣颜色改成白色,调整vy参数
- 荧光特效💡:添加
t.pencolor("#00FF00")
- 一键截图📸:添加
screen.getcanvas().postscript(file="sakura.eps")
- 音乐加持🎵:结合pygame库添加背景音乐
(高阶挑战:试试让樱花树随风摆动!)
六、常见问题QA
Q:为什么花瓣不移动?
A:检查update()方法是否被循环调用
Q:树干太直不自然?
A:调整angle的随机系数,加到20试试
Q:如何改变樱花颜色?
A:修改t.dot()的第二个参数,支持HEX颜色码
(终极技巧:用colormode(255)
可以玩RGB渐变!)
这个项目不仅适合Python学习者练手,还能作为创意礼物送给程序媛/猿朋友!赶紧动手试试,在终端里种出属于你的樱花树吧~