操作实例-进阶3
樱花树
代码<一>:
# 樱花:动态产生
import turtle ast
importrandom
importtime
def SetTurtle():
# t.setup(800, 680) # 定义窗口大小
t.screensize(bg='wheat') # 定义画布,背景小麦色
t.color('sienna') # 画笔 赭(zhě)色
# t.getscreen().tracer(5, 0)
t.tracer(5) # 0或False,表示一次做好,1表示按正常速度进行
t.mode('logo') # 朝北
t.penup()
t.back(150) # 设置起点
t.pendown()
def Tree(length): # 树干,length为初始长度
time.sleep(0.0005)
if length > 3:
# =====枝干颜色和宽度=========
if length <= 12:
if length < 8:
t.pensize(length / 3)
else:
t.pensize(length / 2)
if random.randint(0, 2) == 0: # 随机产生0-2范围的整数
t.color('snow')
else:
t.color('lightcoral') # 淡珊瑚色
else:
t.color('sienna')
t.pensize(length/10)
# ======枝干的运动轨迹=========
t.forward(length)
a = 1.5* random.random()
t.right(20* a)
b = 1.5* random.random()
Tree(length - 10* b)
t.left(40* a)
Tree(length - 10* b)
t.right(20* a)
t.penup()
t.back(length)
t.pendown()
t.hideturtle()
def Petal(num): # 定义花瓣,num为花瓣数
for i in range(num):
a = 200 - 400 * random.random() # 花瓣的左右范围在-200~200,随机
b = 10 - 20 * random.random() # 花瓣上下范围在-10~10,随机
t.penup()
t.fd(b)
t.left(90)
t.fd(a)
t.pendown()
t.color('lightcoral')
t.dot(5) # 花瓣大小
t.penup()
t.back(a)
t.right(90)
t.back(b)
if __name__ == "__main__":
SetTurtle()
Tree(60) # 60为第一步的长度
Petal(200) # 200为花瓣数目
t.Screen().exitonclick()
# t.mainloop()
结果如下:

代码<二>:
# 樱花:有设置阴影效果
import turtle ast
importmath
importrandom
def SetTurtle():
# t.colormode(255) # 采用0-255的RGB值时需要这项设置,0-1的RGB不需要
#t.setup(800, 600,400, 200)
t.screensize(1000, 800)
t.bgcolor(0.5, 0.5, 0.5) # 背景色
# t.tracer(5)
t.left(90)
t.penup()
t.goto(-100, -300) # 设置起点
t.pendown()
def Tree(n, l): # 设置树:n为最长枝干,l为初始移动长度
t.pendown()
# 阴影效果
c = math.cos(math.radians(t.heading()+45))/8+0.25 #
t.pencolor(c, c, c)
t.pensize(n / 3)
t.fd(l)
if n > 0: # 画枝干
left_t = random.random() * 15 + 10 # 左分支偏转角度
right_t = random.random() * 15 + 10 # 右分支偏转角度
next_l = l * (random.random() * 0.25+0.7) # 下一个分支的长度
# 右转一定角度,画右分支
t.right(right_t)
Tree(n - 1, next_l)
# 左转一定角度,画左分支
t.left(right_t + left_t)
Tree(n - 1, next_l)
# 回位
t.right(left_t)
else: # 画叶子
t.right(90)
n = math.cos(math.radians(t.heading()-45))/4+0.5
t.pencolor(n, n * 0.8, n * 0.8)
t.circle(3)
t.left(90)
# 添加0.3倍的飘落叶子
if random.random() > 0.7:
t.penup()
# 飘落
h = t.heading()
an = -40 + random.random() * 40
t.setheading(an)
dis = int(800 * random.random() * 0.5+400*
random.random() * 0.3+200 * random.random() * 0.2)
t.fd(dis)
t.setheading(h)
# 画叶子
t.pendown()
t.right(90)
n = math.cos(math.radians(t.heading()-45))/4+0.5
t.pencolor(n * 0.5+0.5, 0.4+0.4 * n, 0.4+0.4* n)
t.circle(2)
t.left(90)
t.penup()
# 返回
h = t.heading()
t.setheading(an)
t.backward(dis)
t.setheading(h)
t.penup()
t.back(l)
if __name__ == "__main__":
t.tracer(False)
SetTurtle()
Tree(12, 100) # 12为最长枝干,100为初始移动长度
t.tracer(True)
t.mainloop()
结果如下:

代码<三>:
# 樱花树:在CherryTree-2变更树叶颜色,并去掉飘落的树叶
from turtle import*
from random import*
from math import*
def tree(n, l):
pd()
t = cos(radians(heading() + 45)) / 8 + 0.25
pencolor(t, t, t)
pensize(n / 4)
forward(l)
if n > 0:
b = random() * 15 + 10
c = random() * 15 + 10
d = l * (random() * 0.35 + 0.6)
right(b)
tree(n - 1, d)
left(b + c)
tree(n - 1, d)
right(c)
else:
right(90)
n = cos(radians(heading() - 45)) / 4 + 0.5
pencolor(n, n, n)
circle(2)
left(90)
pu()
backward(l)
bgcolor(0.5, 0.5, 0.5)
ht()
speed(0)
tracer(0, 0)
left(90)
pu()
backward(300)
tree(13, 100)
done()
结果如下:
