樱花飘落

屏幕录制 2024-06-21 155836


樱花飘落

导入模块和设置屏幕

通过递归函数tree绘制了一棵分形的樱花树,并通过draw_sakura函数实现了樱花飘落的动画效果。程序使用了Turtle库的基本命令,如forward、right、left、circle等来绘制图形,并通过ontimer实现了定时重复执行某个函数的功能。

from turtle import *
from random import *
from math import *

导入Turtle图形库、random和math模块。

定义树枝绘制函数

def tree(n, l):
    pd()  # 下笔
	# 阴影效果
	t = cos(radians(heading() + 45)) / 8 + 0.25
	pencolor(t, t, t)
	pensize(n / 3)
	forward(l)  # 画树枝

定义一个绘制树枝的函数tree,参数n代表树枝分叉的层次,l代表树枝的长度。pd()是Turtle库的命令,表示将画笔放下(开始绘制)。

计算树枝参数

    if n > 0:
        b = random() * 15 + 10  # 右分支偏转角度
        c = random() * 15 + 10  # 左分支偏转角度
        d = l * (random() * 0.25 + 0.7)  # 下一个分支的长度

如果树枝的层次n大于0,就计算左右分支的角度和下一个分支的长度。

绘制左右分支

        # 右转一定角度,画右分支
        right(b)
        tree(n - 1, d)
        # 左转一定角度,画左分支
        left(b + c)
        tree(n - 1, d)
        # 转回来
        right(c)

通过递归调用tree函数来绘制左右分支。

绘制树叶和飘落效果

    else:
        # 画叶子
        right(90)
        n = cos(radians(heading() - 45)) / 4 + 0.5
        ran = random()
        # 这里相比于原来随机添加了填充的圆圈,让樱花叶子看起来更多一点
        if (ran > 0.7):
            begin_fill()
            circle(3)
            fillcolor('pink')
        # 把原来随机生成的叶子换成了统一的粉色
        pencolor("pink")
        circle(3)
        if (ran > 0.7):
            end_fill()
        left(90)

如果树枝的层次n不大于0,就绘制叶子。叶子是随机填充的粉色圆圈。

# 添加0.3倍的飘落叶子
        if (random() > 0.7):
            pu()
            # 飘落
            t = heading()
            an = -40 + random() * 40
            setheading(an)
            dis = int(800 * random() * 0.5 + 400 * random() * 0.3 + 200 * random() * 0.2)
            forward(dis)
            setheading(t)
            # 画叶子
            pd()
            right(90)
            n = cos(radians(heading() - 45)) / 4 + 0.5
            pencolor(n * 0.5 + 0.5, 0.4 + n * 0.4, 0.4 + n * 0.4)
            circle(2)
            left(90)
            pu()
            # 返回
            t = heading()
            setheading(an)
            backward(dis)
            setheading(t)

添加飘落的叶子,通过随机数决定是否绘制飘落的叶子,以及叶子的位置和颜色。

pu()
backward(l)  # 退回

将画笔抬起,并退回到上一级树枝的起点。

定义樱花绘制函数

def draw_sakura():
	# 随机生成樱花的位置和颜色
	x = randrange(-600, 600)
	y = randrange(-600, 600)
	n = random()
	pencolor(n * 0.5 + 0.5, 0.4 + n * 0.4, 0.4 + n * 0.4)

定义一个绘制樱花的函数draw_sakura,随机生成樱花的位置和颜色。

绘制樱花并定时重复

	# 移动到随机位置并绘制樱花
	up()
	goto(x, y)
	down()
	begin_fill()
	circle(2)
	fillcolor('pink')
	end_fill()
	up()
	
	# 设置ontimer以便在一段时间后再次调用此函数
	ontimer(draw_sakura, 50)

移动到随机位置,绘制一个填充为粉色的圆作为樱花,并设置一个定时器ontimer,这样在50毫秒后会再次调用draw_sakura函数,从而产生樱花飘落的效果。

设置屏幕和绘制树

# 设置屏幕
setup(800, 600)
bgcolor(0.956, 0.9255, 0.9882)
ht()
speed(0)
tracer(0, 0)

设置屏幕的大小为800x600像素,背景颜色为浅色调,隐藏turtle的箭头,设置绘制速度为最快,并且关闭动画效果(即立即显示绘制结果)。

# 绘制树
pu()
backward(50)
left(90)
pu()
backward(300)
tree(12, 100)

移动到起始位置,并调用tree函数开始绘制树,树枝的层次为12,初始长度为100。

开始樱花动画

# 开始绘制樱花动画
draw_sakura()

调用draw_sakura函数开始绘制樱花动画。

启动事件循环

# 启动事件循环
done()

启动Turtle的事件循环,这样程序会一直运行,直到用户关闭图形窗口。

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值