标签:war alt port 绘制 draw pre 指定 bsp 线段
圣诞节即将到了,所以这回通过turtle模块来编写一个表白的小程序
开发时间:2019-12-15
开发工具:Sublime
开发模块: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()
标签:war alt port 绘制 draw pre 指定 bsp 线段
原文地址:https://www.cnblogs.com/lyy135146/p/12043733.html