樱花树学习地址https://blog.csdn.net/weixin_43943977/article/details/102691392
from turtle import *
from random import *
from math import *
import time
def tree(n,l,turtle_t):
turtle_t.pd()#下笔
#阴影效果
t = cos(radians(turtle_t.heading()+45))/8+0.25
turtle_t.pencolor(t,t,t)
turtle_t.pensize(n/3)
turtle_t.forward(l)#画树枝
if n>0:
b = random()*15+10 #右分支偏转角度
c = random()*15+10 #左分支偏转角度
d = l*(random()*0.25+0.7) #下一个分支的长度
#右转一定角度,画右分支
turtle_t.right(b)
tree(n-1,d,turtle_t)
#左转一定角度,画左分支
turtle_t.left(b+c)
tree(n-1,d,turtle_t)
#转回来
turtle_t.right(c)
else:
#画叶子
turtle_t.right(90)
n=cos(radians(turtle_t.heading()-45))/4+0.5
turtle_t.pencolor('pink')
#turtle_t.pencolor(n,n*0.8,n*0.8)
turtle_t.circle(3)
turtle_t.left(90)
#添加0.3倍的飘落叶子
if(random()>0.7):
turtle_t.up()
#飘落
t = turtle_t.heading()
an = -40 +random()*40
turtle_t.setheading(an)
dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)
turtle_t.forward(dis)
turtle_t.setheading(t)
#画叶子
turtle_t.pd()
turtle_t.right(90)
n = cos(radians(turtle_t.heading()-45))/4+0.5
#turtle_t.pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4)
turtle_t.pencolor('pink')
turtle_t.circle(2)
turtle_t.left(90)
turtle_t.pu()#up与pu都是画笔抬起
#返回
t=turtle_t.heading()#显示当前朝向
turtle_t.setheading(an)#设置当前朝向为angle角度。
turtle_t.backward(dis)#后退
turtle_t.setheading(t)
turtle_t.up()
turtle_t.backward(l)#退回
def DrawHeart(t):
t.up()
t.goto(180,-230)
t.down()#开始绘画 pendown() or pd() or down()
t.begin_fill()
t.setheading(135)#设置当前朝向为angle角度
for i in range(10):
t.left(20)
t.forward(3)
for i in range(6):
t.left(10)
t.forward(3.5)
t.end_fill()
t.up()
t.goto(180, -230)
t.down()
t.begin_fill()
t.setheading(45) # 设置当前朝向为angle角度
for i in range(10):
t.right(20)
t.forward(3)
for i in range(6):
t.right(10)
t.forward(3.5)
t.end_fill()
t.up()
def DrawBigHeart(t):
t.up()
t.goto(260,-210)
t.down()
t.speed(100)
t.begin_fill()
t.setheading(135)#设置当前朝向为angle角度
for i in range(100):
t.left(2)
t.forward(1)
for i in range(5):
t.left(1)
t.forward(6.83)
t.end_fill()
t.up()
t.goto(260, -210)
t.down()
t.begin_fill()
t.setheading(45) # 设置当前朝向为angle角度
for i in range(100):
t.right(2)
t.forward(1)
for i in range(5):
t.right(1)
t.forward(6.83)
t.end_fill()
t.up()
def BiuBiuHeart(turtle_t):
turtle_t.up()
turtle_t.goto(100, -250)
turtle_t.down()
turtle_t.circle(20)
turtle_t.setheading(270)
turtle_t.forward(50)
turtle_t.setheading(225)
turtle_t.forward(35)
turtle_t.goto(100, -300)
turtle_t.setheading(0)
turtle_t.forward(35)
turtle_t.setheading(270)
turtle_t.forward(28)
turtle_t.up()
turtle_t.goto(100, -265)
turtle_t.down()
turtle_t.setheading(0)
turtle_t.forward(30)
turtle_t.setheading(45)
turtle_t.forward(12)
turtle_t.up()
turtle_t.goto(100, -275)
turtle_t.down()
turtle_t.setheading(0)
turtle_t.forward(40)
turtle_t.setheading(-45)
turtle_t.forward(12)
def RecviveHeart(turtle_t):
turtle_t.up()
turtle_t.goto(350, -240)
turtle_t.setheading(0)
turtle_t.down()
turtle_t.circle(20)
turtle_t.setheading(270)
turtle_t.forward(50)
turtle_t.setheading(225)
turtle_t.forward(45)
turtle_t.goto(350, -290)
turtle_t.setheading(315)
turtle_t.forward(45)
turtle_t.up()
turtle_t.goto(350, -255)
turtle_t.down()
turtle_t.setheading(225)
turtle_t.forward(30)
turtle_t.up()
turtle_t.goto(350, -255)
turtle_t.down()
turtle_t.setheading(315)
turtle_t.forward(30)
turtle_t.up()
def BeginDraw(turtle_t):
turtle_t.up()
turtle_t.color('PaleVioletRed1')
turtle_t.goto(-150, 350)
turtle_t.write('十年之约,如期而至', font=('Courier', 20, 'bold'))#土味情话系列,爱写啥写啥
turtle_t.up()
turtle_t.color('pink', 'red')
turtle_t.pensize(3)
turtle_t.setheading(0)
BiuBiuHeart(turtle_t)
RecviveHeart(turtle_t)
DrawHeart(turtle_t)
DrawBigHeart(turtle_t)
turtle_t.up()
turtle_t=Turtle()
w=Screen()
w.bgpic('bg.gif')#设置背景,只能是gif格式
turtle_t.ht()#隐藏turtle
turtle_t.speed(200)
time.sleep(3)
BeginDraw(turtle_t)
turtle_t.setheading(0)
#time.sleep(10)
turtle_t.goto(0,-50)
turtle_t.pensize(2)#改变画笔的尺寸 pensize() or width() turtle.pensize() or turtle.width() 获取当前的画笔尺寸 turtle.pensize(x) or turtle.width(x) #将画笔尺寸改为x
turtle_t.color('pink','red')#画笔颜色,填充色
w.bgcolor(0.5,0.5,0.5)#背景色
#turtle_t.speed(0)#速度 1-10渐进,0 最快
w.tracer(0,0)#(0,0)跳过动画直接呈现图像,当第一个参数n设置后,绘画动画效果被关闭,每隔n次更新下屏幕,可以加速绘画速度
turtle_t.up()#抬笔
turtle_t.backward(150)
turtle_t.left(90)#左转90度
turtle_t.up()#抬笔
turtle_t.backward(300)#后退300
tree(12,100,turtle_t)#递归7层
done()