代码改变世界

Pyhton表白代码——浪漫圣诞节

2019-12-15 12:25  鲁尧尧  阅读(2042)  评论(0编辑  收藏  举报

圣诞节即将到了,所以这回通过turtle模块来编写一个表白的小程序

开发时间:2019-12-15

开发工具:Sublime

开发模块:turtle

这里用到了turtle库的相关知识,如果不熟悉可以看我之前的博客:

turtle库相关知识点

 

首先,我们需要来创建一个函数来承载所有初始化数据,包括画布的大小,画笔的尺寸、颜色、还有画笔的移动速度

以演示图为例子,设置了一个800*600大小的画布,红色画笔宽为5,速度为10

代码如下所示:

def initdata():
    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循环来绘制,通过不断偏转方向的小线段组成

代码如下:

def hart_arc():
    for i in range(200):
        t.right(1)
        t.forward(2)

 

 

现在我们开始绘制图形draw()

首先表白总要有表白者和被表白者吧,所以我们先创建name和sign来存储名字

之后通过调用初始化函数来获取相关信息

最后就可以操纵画笔开始绘制。

先将画笔移动到(0,-180)的位置,也就是爱心的下部尖端,这就用到了刚刚创建的移动函数,

之后控制画笔调整方向,移动224的距离绘制完成前面的爱心下部的右侧边

然后绘制爱心上半部分,调用hart_arc()绘制了爱心上半部分左侧,

然后调整方向,画笔向左偏转120度,再绘制另一个半圆

最后画笔返回初始位置,画好了第一个爱心,将其填充为粉色。

同理可画第二个爱心,到最后来一个“一箭双❤”就可以了

 

绘制完成之后,我们就要输出刚刚记载的两个人名了

这需要用到write()函数

代码如下:

def draw():
    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")

 

这样表白的代码就制作完成了

 

 感谢大家支持,总体代码如下:

import turtle as t
import time

def initdata():
    t.setup(800,600)
    t.pencolor('red')
    t.pensize(5)
    t.speed(10)

def move_pen(x,y):
    t.hideturtle()
    t.up()
    t.goto(x,y)
    t.down()
    t.showturtle()

def hart_arc():
    for i in range(200):
        t.right(1)
        t.forward(2)

def draw():
    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")
def main():
    draw()
    time.sleep(5)
if __name__ == '__main__':
    main()