目录
前言
一年一度的圣诞节又要来喽~在这么浪漫的节日里怎么能少的了一个浪漫的程序员呢~让我们一起画个圣诞树,送给你喜欢的那个人吧~
一、实现步骤
用Python的小海龟实现(Turtle)
具体分为五个步骤:
(1)圣诞树
(2)星星
(3)礼物
(4)雪花
(5)祝福
二、编码实现
1. 圣诞树
程序设计
def tree(d,s): #运用递归的方法画圣诞树
t.hideturtle() #隐藏画笔
t.pencolor('limegreen') #画笔颜色置为绿色,用来画树
t.pensize(5) #画笔大小为5
t.speed(0) #最快速度画树(其实挺慢的)
if d<=0:
return
t.forward(s)
tree(d-1,s*0.8)
t.right(120)
tree(d-3,s*0.5)
t.right(120)
tree(d-3,s*0.5)
t.right(120)
t.backward(s)
def trees(): #画完整的圣诞树
t.hideturtle() #隐藏画笔
t.left(90) #将画笔向左旋转90度
t.up() #提起画笔
t.goto(0,-110) #移动画笔到坐标(0,-110)处开始画树
t.down()
t.pencolor('saddlebrown') #先画树根,将画笔置为棕色
t.pensize(20) #树根比较粗,画笔大小设置大一点
t.forward(50) #树根长度为50个像素
t.up() #提笔
t.goto(0,-50) #将画笔移到(0,-50)处
t.down()
tree(15,60) #调用画树的递归函数,慢慢画树
t.goto(0,250) #画完树后,将画笔移到(0,250)的位置,准备画大星星
t.down()
t.right(90) #将画笔向右旋转90度,指向右方,准备画大星星
star() #画大星星
程序分析
这段代码是用 Python 的 turtle 模块,画出一个圣诞树的函数。圣诞树由一个树干和很多层树叶构成,树叶要用递归的方式画出来。画树的函数 tree(d,s) 中,d 表示树的深度,s 表示树的长度,如果深度为 0,则返回,否则画出一条长度为 s 的线段。然后分别右转 120 度,调用 tree(d-3, s*0.5) 画出树叶,如此递归下去,直到深度为 0。而函数 trees() 则先画出一个树根,然后调用 tree() 画出树叶,最后画出一个大星星。其中需要用到 turtle 模块中的一些函数,比如 goto()、up()、down()、right() 等等。
2. 星星
程序设计
def star(): #画圣诞树顶的大星星
t.hideturtle() #隐藏画笔
t.pensize(2) #给画笔设置大小
t.pencolor("gold") #给画笔设置颜色,'gold'表示金色
t.up() #提起画笔,画笔移动时不会画画
t.forward(5) #将画笔向前移5个像素(此时画笔方向向右,即向右移动5个像素)
t.down() #画笔放下,画笔移动时会产生轨迹
t.begin_fill() #给星星填充颜色
for i in range(5): #因为是五角星,所以要循环五次画五个角
t.forward(20)
t.right(144)
t.forward(20)
t.left(72)
t.fillcolor('yellow') #设置填充的颜色
t.end_fill()
return
def stars(): #画圣诞树上的小星星
t.hideturtle() #隐藏画笔
t.speed(0) #设置画画速度,0为最快速
t.pensize(5) #设置画笔大小
for i in range(5): #循环五次画五个角,与画大星星一样
t.forward(5)
t.right(144)
t.forward(5)
t.left(72)
return
def stares(): #循环画圣诞树上的小星星
t.hideturtle() #隐藏画笔
x1=-110 #x1赋初值
x2=110 #x2赋初值
y1=-40 #y1赋初值
y2=-15 #y2赋初值
n=0 #n用来控制在圣诞树两边画星星
c = ['red', 'orange', 'yellow', 'brown', 'cyan', 'pink', 'blue', 'blueviolet','gold','white'] #星星的颜色,可自定义
for i in c: #循环画不同颜色的星星
t.pencolor(i) #每次从颜色列表c中按序取一个颜色
t.up() #找画星星的位置时要记得提起画笔
if n%2==0: #当n为偶数时在圣诞树左边画星星
t.setx(r.randint(x1,0))
t.sety(r.randint(y1,y2))
else: #当n为奇数时在圣诞树右边画星星
t.setx(r.randint(0,x2))
t.sety(r.randint(y1,y2))
t.down()
stars() #开始画星星
x1+=10 #每次画完记得按圣诞树的层数要将x1,x2减小,y1,y2上移
x2-=10
y1+=25
y2+=25
n+=1 #n=n+1
程序分析
这段代码用 turtle 模块画出了圣诞树上的星星。其中画大星星的函数 star(),先将画笔向前移动了 5 个像素,然后用 for 循环画出五个角,每次向前移动 20 个像素,右转 144 度(因为五角星每个角是 36 度),向前移动 20 个像素,左转 72 度。最后用 begin_fill()、fillcolor()、end_fill() 函数给星星填充颜色,并返回。画小星星的函数 stars() 与 star() 类似,只是少了填充的步骤。而画圣诞树上所有星星的函数 stares(),则使用了循环,可以画出不同颜色、不同位置的星星。首先设定初始值 x1=-110、x2=110、y1=-40 和 y2=-15,用来控制星星在圣诞树上的位置。然后定义颜色列表 c,用 for 循环画出不同颜色的星星。每画一个星星,n 加一,根据 n 的奇偶性判断是在圣诞树左边还是右边画星星,然后用 randint() 函数随机生成星星的坐标,接着调用 stars() 函数画出星星,最后更新 x1、x2、y1、y2 的值,保证下一个星星的位置在上一个星星的周围。
3. 雪花
程序设计
def snow(): #画雪花(全屏)
t.hideturtle() #隐藏画笔
t.pensize(2) #画笔大小
t.speed(0) #画雪花的速度
for i in range(500): #循环画500个雪花
t.pencolor('white') #雪花是白色的
t.penup() #提笔
t.setx(r.randint(-1000,1000)) #在画布上随机找点
t.sety(r.randint(-1000,1000))
t.pendown()
snowsize=r.randint(4,10) #雪花大小
for i in range(6): #画雪花(雪花为六瓣,需要循环六次)
t.forward(int(snowsize))
t.backward(int(snowsize))
t.left(60)
程序分析
这段代码用 turtle 模块画出了一个全屏的雪花效果。首先定义 snow() 函数,里面包含了循环 500 次,画出 500 个雪花的过程。其中要注意,每画一个雪花都要先将笔提起,然后随机在画布上找一个点,再将笔放下,开始画雪花。接着定义雪花的大小 snowsize,大小是随机生成的,范围是 4 到 10。然后用 for 循环画出六瓣雪花,每画一瓣,向前移动 snowsize 像素,再向后移动 snowsize 像素,最后左转 60 度。这样循环六次就可以画出一个完整的雪花了。用 pencolor() 函数将雪花的颜色设置为白色,用 randint() 函数随机生成坐标,用 speed() 函数设置画雪花的速度为 0(最快速度),用 pensize() 函数设置画笔的粗细为 2。最后调用这个函数,就可以看到一个全屏都是飘雪花的效果了。
4. 礼物
程序设计
def gift(): #画正方体礼物盒
t.hideturtle() #隐藏画笔
t.speed(0) #画笔速度
x=40 #礼物盒的长和宽,我设置为正方形礼物盒,长宽高相等
y=16 #由于是立体图形,宽与长不一样
for i in range(4): #以下为画礼物盒的方法(x,y的值可以自行修改)
t.forward(x)
t.left(90)
t.up()
t.left(45)
t.forward(y)
t.right(45)
t.down()
for i in range(4):
t.forward(x)
t.left(90)
t.up()
t.right(135)
t.forward(y)
t.down()
t.left(180)
t.forward(y)
t.backward(y)
t.right(45)
t.forward(x)
t.left(45)
t.forward(y)
t.backward(y)
t.left(45)
t.forward(x)
t.right(45)
t.forward(y)
t.backward(y)
t.left(135)
t.forward(x)
t.right(135)
t.forward(y)
t.backward(y)
t.right(135)
t.forward(x)
t.left(90)
def gifts(): #画多个正方体礼物盒
t.hideturtle() #隐藏画笔
t.penup() #提笔
t.goto(-180,-150) #将画笔移到(-180,-150)的位置准备画礼物盒
t.pendown()
t.pensize(5) #画笔大小
c=['red','orange','yellow','green','cyan','blue','blueviolet'] #礼物盒的颜色
for i in c: #循环画不同颜色的礼物盒
t.up()
t.forward(40)
t.down()
t.pencolor(i)
gift()
程序分析
这段代码用 turtle 模块画出了一个立体的正方体礼物盒效果。首先定义 gift() 函数,里面包含了画出一个正方体礼物盒的过程。这里我设置礼物盒的长、宽、高相等,长和宽为 x,高为 y。在循环里,先画出四条边,然后左转 45 度,向前移动 y 像素,右转 45 度,再画出四条边,然后左转 135 度,向前移动 y 像素,再右转 180 度,向前移动 y 像素,左转 45 度,向前移动 x 像素,右转 45 度,向前移动 y 像素,向后移动 y 像素,左转 45 度,向前移动 x 像素,右转 45 度,向前移动 y 像素,向后移动 y 像素,左转 135 度,向前移动 x 像素,右转 135 度,向前移动 y 像素,向后移动 y 像素,右转 135 度,向前移动 x 像素,左转 90 度,完成一个正方体礼物盒的绘制。
接着定义 gifts() 函数,用来画出多个正方体礼物盒。在循环里,先用 up() 函数提起笔,向前移动 40 像素,再用 down() 函数将笔放下,画出一个正方体礼物盒,拉出礼物盒的颜色列表 c,循环画出不同颜色的礼物盒。最后的效果就是屏幕上有多个彩色的正方体礼物盒,从而实现了礼物盒的效果。
5. 祝福
程序设计
def writes(): #写字:“圣诞快乐!”
t.pencolor("cyan") #画笔颜色,天蓝色
t.hideturtle() #隐藏画笔
t.up()
t.goto(-160,-250) #从(-160,-250)开始写字
t.down()
t.write("Merry Christmas!",font=("Comic Sans MS",30,"bold")) #开始写字,"Merry Christmas!"为要写的字,"Comic Sans MS"为字体,30为字的大小,bold为粗体(可自行修改要写的字)
程序分析
这段代码用 turtle 模块在屏幕上写出了一段文字 “Merry Christmas!” 的效果。定义 writes() 函数,先用 pencolor() 函数设置画笔颜色为天蓝色,再用 up() 函数提起笔,将画笔移动到屏幕底部中心点的左边 160 像素,向下 250 像素的位置,准备写字。用 down() 函数将笔放下,用 write() 函数开始写字,"Merry Christmas!" 是要写的字,"Comic Sans MS" 是字体,30 是字的大小,bold 是粗体。写完后,画笔隐藏,写字结束。最后在屏幕上就会出现一行 “Merry Christmas!” 的字。
原文链接:https://blog.csdn.net/m0_68111267/article/details/128213770
此处评论已关闭