# -*- coding: utf-8 -*-
# @Time : 2022/12/13 11:00
# @Author : hp
import turtle as t
import random
random.seed(7)
#设置窗体大小
t.setup(720, 640, startx=None, starty=None)
#设置速度最快
t.speed(0)
#
t.color( "yellow")
#画笔颜色
t.pencolor('green')
#画笔粗细
t.pensize(10)
#抬起画笔
t.penup()
#使Turtle隐身
t.hideturtle()
#turtle.goto(x,y)方法让海龟沿着绝对坐标进行运动
t.goto(0, 150)
#使Turtle显形
t.showturtle()
#方法放下笔,是用来把笔拉回屏幕上的。
t.pendown()
#小海龟的形状
t.shape(name="circle")
#将Turtle的方向设置为to_angle
t.seth(-120)
t.screensize(bg='gray25') # 定义背景颜色
# t.screensize(bg='seashell') # 定义背景颜色
# t.screensize(bg='light pink') # 定义背景颜色
'''
树的主体
'''
#树的轮廓函数
def Tree_outline(num,f_or_b,len_fd,direction,len_dir):
for i in range(num):
f_or_b(len_fd)
direction(len_dir)
def Tree_outline_2(num,f_or_b,len_fd,direction,len_dir):
for i in range(num):
f_or_b(len_fd)
direction(len_dir)
def Pen_Trans(angle,x,y,len_fd,goto=False):
t.penup()
t.seth(angle)
if goto == True :
t.goto(x, y)
t.fd(len_fd)
else:
t.fd(len_fd)
t.pendown()
## 第一层圣诞树
#侧面轮廓
Tree_outline(15,t.fd,12,t.right,2)
Pen_Trans(-60,0,150,8,True)
Tree_outline(15,t.fd,11,t.left,2)
Pen_Trans(-150,0,0,8)
#底部
for i in range(3):
Tree_outline_2(5,t.fd,16,t.right,15)
Pen_Trans(-153,0,0,8)
## 第二层圣诞树
#侧面轮廓
Pen_Trans(-120,-95,8,8,True)
Tree_outline(10,t.fd,10,t.right,6)
Pen_Trans(-55,90,10,8,True)
Tree_outline(10,t.fd,10,t.left,6)
#底部轮廓
Pen_Trans(-145,0,0,10)
for i in range(5):
Tree_outline_2(5,t.fd,14,t.right,14)
Pen_Trans(-155,0,0,5)
## 第三层圣诞树
#侧面轮廓
Pen_Trans(-120,-140,-70,0,True)
Tree_outline(15,t.fd,6,t.right,3)
Pen_Trans(-50,130,-70,0,True)
Tree_outline(15,t.fd,6,t.left,3)
#底部轮廓
Pen_Trans(-145,0,0,10)
for i in range(6):
Tree_outline_2(5,t.fd,13,t.right,14)
Pen_Trans(-155,0,0,5)
## 第四层圣诞树
#侧面轮廓
Pen_Trans(-130,-160,-140,0,True)
Tree_outline(15,t.fd,6,t.right,3)
Pen_Trans(-45,160,-140,0,True)
Tree_outline(15,t.fd,6,t.left,3)
#底部轮廓
Pen_Trans(-145,0,0,10)
for i in range(7):
Tree_outline_2(5,t.fd,13,t.right,14)
Pen_Trans(-155,0,0,5)
##树干
Pen_Trans(-85,-70,-195,0,True)
Tree_outline(3,t.fd,20,t.left,3)
Pen_Trans(-95,70,-195,0,True)
Tree_outline(3,t.fd,20,t.right,3)
Pen_Trans(-170,0,0,10)
Tree_outline(10,t.fd,12,t.right,2)
##层次感
#换成浅色
t.pensize(8)
t.pencolor("DarkSeaGreen")
#横向弯曲条纹1
Pen_Trans(-155,65,55,0,True)
for i in range(2):
Tree_outline_2(5, t.fd, 13, t.right, 13)
Pen_Trans(-155,0,0,8)
#横向弯曲条纹2
Pen_Trans(-155,95,-15,0,True)
for i in range(3):
Tree_outline_2(5, t.fd, 13, t.right, 13)
Pen_Trans(-155,0,0,8)
#横向弯曲条纹3
Pen_Trans(-155,155,-95,0,True)
for i in range(4):
Tree_outline_2(5, t.fd, 15, t.right, 15)
Pen_Trans(-155,0,0,8)
#横向弯曲条纹4
Pen_Trans(-155,175,-165,0,True)
for i in range(5):
Tree_outline_2(5, t.fd, 13, t.right, 15)
Pen_Trans(-155,0,0,8)
'''
给树加点装饰
'''
##蝴蝶结
def hdj(x, y,seth):
t.pencolor("light pink")
t.penup()
t.goto(x, y)
t.seth(seth+80)
t.pendown()
t.pensize(3)
t.circle(5)
t.seth(seth+10)
t.fd(15)
t.seth(seth+120)
t.fd(20)
t.seth(seth+240)
t.fd(20)
t.seth(seth+180)
t.fd(20)
t.seth(seth+-60)
t.fd(20)
t.seth(seth+50)
t.fd(20)
t.seth(seth+-40)
t.fd(30)
t.seth(seth+-130)
t.fd(5)
t.seth(seth+135)
t.fd(30)
t.seth(seth+-60)
t.fd(30)
t.seth(seth+-150)
t.fd(6)
t.seth(seth+110)
t.fd(30)
# 第一层蝴蝶结
hdj(30, 70,0)
# 第二层蝴蝶结
hdj(-10, -20,-60)
#第三层蝴蝶结
hdj(-100, -120,20)
hdj(30, -80,-20)
#第四层蝴蝶结
hdj(50, -150,-80)
hdj(140, -170,0)
##星星
def star(x, y, size):
t.pensize(2)
t.pencolor("lemonchiffon")
t.penup()
t.goto(x, y)
t.pendown()
t.begin_fill()
t.fillcolor("yellow")
for i in range(5):
t.left(72)
t.fd(size)
t.right(144)
t.fd(size)
t.end_fill()
#顶层大星星
t.seth(70)
star(-10,165,20)
#第一层星星
t.seth(-35)
star(120,25,10)
t.seth(55)
star(-50,55,10)
t.seth(85)
star(-135,25,10)
#第二层星星
t.seth(15)
star(35,5,10)
t.seth(-15)
star(180,-35,10)
t.seth(25)
star(-70,-23,10)
t.seth(85)
star(60,-45,10)
#第三层星星
t.seth(-25)
star(210,-105,10)
t.seth(35)
star(-205,-115,10)
t.seth(25)
star(110,-85,10)
t.seth(65)
star(-105,-85,10)
#第四层
t.seth(55)
star(-60,-155,10)
t.seth(95)
star(95,-170,10)
##彩灯
def drawlight(color):
t.speed(0)
t.ht()
t.pensize(2)
lightsize = random.randint(6, 9)
if color == 0:
t.color('tomato')
elif color == 1:
t.color('orange')
elif color == 2:
t.color('springgreen')
elif color == 3:
t.color('gold')
else:
t.color('aqua')
t.begin_fill()
t.circle(lightsize)
t.end_fill()
t.seth(-155)
t.penup()
t.goto(230, -170)
for i in range(5):
lightcolor = random.randint(0,5)
drawlight(lightcolor)
t.fd(26)
t.right(10)
t.seth(-155)
t.goto(100, -175)
for i in range(5):
lightcolor = random.randint(0,5)
drawlight(lightcolor)
t.fd(26)
t.right(12)
t.seth(-155)
t.goto(-30, -175)
for i in range(5):
lightcolor = random.randint(0,5)
drawlight(lightcolor)
t.fd(26)
t.right(12)
t.seth(-155)
t.goto(-160, -175)
for i in range(4):
lightcolor = random.randint(0,5)
drawlight(lightcolor)
t.fd(26)
t.right(18)
t.pendown()
'''
雪花背景
'''
## 绘制雪花
def drawsnow():
t.speed(0)
t.ht()
t.pensize(3)
for i in range(50): # 雪花数目
t.pencolor("white") #雪花颜色
t.pu()
t.setx(random.randint(-300, 300)) # 随机坐标-x
t.sety(random.randint(-250, 350)) # 随机坐标-y
t.pd()
dens = 6 # 雪花瓣数设为6
snowsize = random.randint(5, 12) # 雪花大小随机数
for j in range(dens):
t.fd(int(snowsize))
t.backward(int(snowsize))
t.right(int(360 / dens)) # 转动角度
drawsnow()
##来个月亮
t.up()
t.goto(200, 300)
t.down()
t.color("yellow")
t.begin_fill()
t.circle(30)
t.end_fill()
##写字
t.color("red") # 填充颜色
t.up() # 抬笔
t.goto(-10,220) # 设置起点位置
t.down() # 落笔
t.write("Merry Christmas@爱挠静香的下巴", align="center", font=("Comic Sans MS", 28, "bold"))
t.ht()
t.done()