🌸 效果抢先看
先给各位看看最终效果!运行程序后会出现一棵缓缓生长的樱花树,粉白花瓣随机飘落,树干会呈现自然弯曲(超有真实感有没有!)。最绝的是按空格键可以切换昼夜模式,夜晚模式树干会发光!!!(文末附完整源码)
🧠 开发思路大揭秘
你可能想知道:用Python怎么做图形界面?其实我们用的是内置的turtle库(海龟绘图),这个库虽然名字可爱,但功能超强大!整个项目分为三个核心模块:
- 树干生成算法(这个最难)
- 花瓣飘落动画
- 昼夜模式切换
⚙️ 核心技术点
1. 递归算法画树枝
def draw_branch(branch_length, pensize):
if branch_length > 5:
# 主干绘制
turtle.pensize(pensize)
turtle.forward(branch_length)
# 右侧分支
right_angle = random.randint(15,45)
turtle.right(right_angle)
draw_branch(branch_length - random.randint(10,15), pensize*0.8)
# 左侧分支
left_angle = random.randint(15,45)
turtle.left(left_angle + right_angle)
draw_branch(branch_length - random.randint(10,15), pensize*0.8)
# 回到原点
turtle.right(left_angle)
turtle.backward(branch_length)
这里用递归实现树枝分叉(就像细胞分裂一样),每次递归树枝长度减少,笔触变细。随机角度让每棵树都独一无二!
2. 花瓣飘落动画
重点在随机生成位置和下落轨迹:
def falling_flowers():
for _ in range(50):
# 随机生成花瓣
x = random.randint(-400, 400)
y = random.randint(-400, 400)
size = random.randint(5, 15)
# 创建花瓣并设置动画
petal = turtle.Turtle()
petal.speed(0)
petal.penup()
petal.goto(x, y)
petal.color("#FFB3DE")
# 下落动画
for i in range(50):
petal.sety(y - i*2)
petal.right(5)
petal.shapesize(size/10)
💻 完整代码实现
(先别急着敲代码!后面有常见报错解决方案)
import turtle
import random
# 初始化设置
turtle.bgcolor("#000000")
turtle.speed(0)
turtle.hideturtle()
# 树干颜色配置
trunk_color = {
"day": "#8B4513",
"night": "#FFD700"
}
# 递归绘制树枝
def draw_branch(branch_length, pensize):
#...省略递归代码见上文...
# 绘制花朵
def draw_flower():
#...花朵绘制逻辑...
# 花瓣飘落动画
def falling_flowers():
#...动画代码见上文...
# 切换昼夜模式
def toggle_night():
global is_night
is_night = not is_night
turtle.bgcolor("#FFFFFF" if is_night else "#000000")
turtle.color(trunk_color["night" if is_night else "day"])
# 主程序
if __name__ == "__main__":
is_night = False
turtle.listen()
turtle.onkeypress(toggle_night, "space")
turtle.color(trunk_color["day"])
draw_branch(100, 15)
draw_flower()
falling_flowers()
turtle.done()
🚀 优化你的樱花树
想让效果更惊艳?试试这些调整:
- 修改第7行的
bgcolor值换背景色 - 调整
draw_branch参数:- 把100改成其他数值控制树的大小
- 修改random.randint范围改变分叉角度
- 在falling_flowers里增加花瓣数量(现在是50片)
❌ 常见报错解决
遇到这些问题别慌!
TurtleGraphicsError: bad color string→ 检查所有颜色值都要带#号- 花瓣不动? → 确保没修改
falling_flowers里的循环次数 - 切换模式卡顿 → 把
turtle.speed(0)调到最快
🎓 学习收获
通过这个项目你能掌握:
- turtle库的进阶用法(连我都没想到能做出这种效果!)
- 递归算法的实际应用场景
- 动画原理与随机数运用
- 事件监听实现交互
🌸 最后说两句
其实最开始我只是想画个静态树,结果越写越上头(程序员都懂的!)。调试树枝角度的时候,看着各种"歪脖子树"笑到肚子痛。建议大家都动手改改参数,你会发现随机算法能产生意想不到的美丽图案!
完整源码已放在GitHub(地址见评论区),如果对你有帮助,求个star⭐️~下期可能会出雪花飘落效果,想看的话留言告诉我!
本文代码仅供学习交流,禁止用于商业用途。树木生长算法参考了L-system理论,特此说明。
240

被折叠的 条评论
为什么被折叠?



