圣诞节即将到了,所以这回通过turtle模块来编写一个表白的小程序
开发时间:2019-12-15
开发工具:Sublime
开发模块:turtle
这里用到了turtle库的相关知识,如果不熟悉可以看我之前的博客:
首先,我们需要来创建一个函数来承载所有初始化数据,包括画布的大小,画笔的尺寸、颜色、还有画笔的移动速度
以演示图为例子,设置了一个800*600大小的画布,红色画笔宽为5,速度为10
代码如下所示:
definitdata():
t.setup(800,600)
t.pencolor('red')
t.pensize(5)
t.speed(10)
设置好相关属性后,就可以开始作画了
首先画笔位于正中央,若想移动画笔将会在画布上留下痕迹,也就是画上了线条,
但是有些线条,画作本身并不需要,这就需要做到让画笔移动的同时,画布不留痕迹
需要用到up()和down();两个函数,如直译一般作用为抬起画笔和放下画笔
所以操作为,抬起画笔——移动到指定地方——放下画笔
代码如下所示:
ef move_pen(x,y):
t.hideturtle()
t.up()
t.goto(x,y)
t.down()
t.showturtle()
注意:hideturtle()和showturtle()为隐藏画笔和显示画笔。对画作本身毫无影响
绘制演示图中,最难的部分在哪里?
一定是爱心上半部分的两个半圆,所以为方便,我们单独讲这一部分提出来做一个绘制半圆的函数
在turtle库中并没有绘制曲线的函数,最接近的也只有画圆了。
不过我们可以通过割圆法来绘制,也就是将这一段圆弧视为一个边长很短的多边形
所以我们通过for循环来绘制,通过不断偏转方向的小线段组成
代码如下:
defhart_arc():for i in range(200):
t.right(1)
t.forward(2)
现在我们开始绘制图形draw()
首先表白总要有表白者和被表白者吧,所以我们先创建name和sign来存储名字
之后通过调用初始化函数来获取相关信息
最后就可以操纵画笔开始绘制。
先将画笔移动到(0,-180)的位置,也就是爱心的下部尖端,这就用到了刚刚创建的移动函数,
之后控制画笔调整方向,移动224的距离绘制完成前面的爱心下部的右侧边
然后绘制爱心上半部分,调用hart_arc()绘制了爱心上半部分左侧,
然后调整方向,画笔向左偏转120度,再绘制另一个半圆
最后画笔返回初始位置,画好了第一个爱心,将其填充为粉色。
同理可画第二个爱心,到最后来一个“一箭双❤”就可以了
绘制完成之后,我们就要输出刚刚记载的两个人名了
这需要用到write()函数
代码如下:
defdraw():
name=input("请输入表白姓名:")
sign=input("请输入你的大名:")
initdata()
move_pen(0,-180)
t.left(140)
t.fillcolor("pink")
t.begin_fill()
t.forward(224)
hart_arc()
t.left(120)
hart_arc()
t.forward(224)
t.end_fill()
move_pen(x=70, y=160)
t.left(185)
t.circle(-110,185)
t.forward(50)
move_pen(-180,-180)
t.left(180)
t.forward(600)
move_pen(0,50)
t.hideturtle()
t.color('#CD5C5C', 'red')
t.write(name, font=('Arial', 20, 'bold'), align="center")
t.color('red', 'pink')
time.sleep(2)
move_pen(220, -180)
t.hideturtle()
t.write(sign, font=('Arial', 20), align="center")
这样表白的代码就制作完成了
感谢大家支持,总体代码如下:
importturtle as timporttimedefinitdata():
t.setup(800,600)
t.pencolor('red')
t.pensize(5)
t.speed(10)defmove_pen(x,y):
t.hideturtle()
t.up()
t.goto(x,y)
t.down()
t.showturtle()defhart_arc():for i in range(200):
t.right(1)
t.forward(2)defdraw():
name=input("请输入表白姓名:")
sign=input("请输入你的大名:")
initdata()
move_pen(0,-180)
t.left(140)
t.fillcolor("pink")
t.begin_fill()
t.forward(224)
hart_arc()
t.left(120)
hart_arc()
t.forward(224)
t.end_fill()
move_pen(x=70, y=160)
t.left(185)
t.circle(-110,185)
t.forward(50)
move_pen(-180,-180)
t.left(180)
t.forward(600)
move_pen(0,50)
t.hideturtle()
t.color('#CD5C5C', 'red')
t.write(name, font=('Arial', 20, 'bold'), align="center")
t.color('red', 'pink')
time.sleep(2)
move_pen(220, -180)
t.hideturtle()
t.write(sign, font=('Arial', 20), align="center")defmain():
draw()
time.sleep(5)if __name__ == '__main__':
main()
原文出处:https://www.cnblogs.com/lyy135146/p/12043733.html