新闻动态

Python使用turtle模块绘制爱心图案

发布日期:2022-01-29 18:15 | 文章来源:脚本之家

程序员的浪漫,你懂吗?

今天使用python小海龟实现爱心图案的绘制,代码如下:

import turtle
import time
 
 
# 清屏函数
def clear_all():
 turtle.penup()
 turtle.goto(0, 0)
 turtle.color('white')
 turtle.pensize(800)
 turtle.pendown()
 turtle.setheading(0)
 turtle.fd(300)
 turtle.bk(600)
 
 
# 重定位海龟的位置
def go_to(x, y, state):
 turtle.pendown() if state else turtle.penup()
 turtle.goto(x, y)
 
 
# 画线
# state为真时海龟回到原点,为假时不回到原来的出发点
def draw_line(length, angle, state):
 turtle.pensize(1)
 turtle.pendown()
 turtle.setheading(angle)
 turtle.fd(length)
 turtle.bk(length) if state else turtle.penup()
 turtle.penup()
 
 
# 画箭羽
def draw_feather(size):
 angle = 30  # 箭的倾角
 feather_num = size//6# 羽毛的数量
 feather_length = size // 3 # 羽毛的长度
 feather_gap = size//10  # 羽毛的间隔
 for i in range(feather_num):
  draw_line(feather_gap, angle+180, False)# 箭柄,不折返
  draw_line(feather_length, angle + 145, True)  # 羽翼,要折返
 draw_line(feather_length, angle + 145, False)
 draw_line(feather_num*feather_gap, angle, False)
 draw_line(feather_length, angle + 145 + 180, False)
 for i in range(feather_num):
  draw_line(feather_gap, angle+180, False)# 箭柄,不折返
  draw_line(feather_length, angle - 145, True)  # 羽翼,要折返
 draw_line(feather_length, angle - 145, False)
 draw_line(feather_num*feather_gap, angle, False)
 draw_line(feather_length, angle - 145 + 180, False)
 
 
# 画爱心
def draw_heart(size):
 turtle.color('red', 'pink')
 turtle.pensize(2)
 turtle.pendown()
 turtle.setheading(150)
 turtle.begin_fill()
 turtle.fd(size)
 turtle.circle(size * -3.745, 45)
 turtle.circle(size * -1.431, 165)
 turtle.left(120)
 turtle.circle(size * -1.431, 165)
 turtle.circle(size * -3.745, 45)
 turtle.fd(size)
 turtle.end_fill()
 
 
# 画箭
def draw_arrow(size):
 angle = 30
 turtle.color('black')
 draw_feather(size)
 turtle.pensize(4)
 turtle.setheading(angle)
 turtle.pendown()
 turtle.fd(size*2)
 
 
# 一箭穿心
# 箭的头没有画出来,而是用海龟来代替
def arrow_heart(x, y, size):
 go_to(x, y, False)
 draw_heart(size*1.15)
 turtle.setheading(-150)
 turtle.penup()
 turtle.fd(size*2.2)
 draw_heart(size)
 turtle.penup()
 turtle.setheading(150)
 turtle.fd(size * 2.2)
 draw_arrow(size)
 
 
# 画出发射爱心的小人
def draw_people(x, y):
 turtle.penup()
 turtle.goto(x, y)
 turtle.pendown()
 turtle.pensize(2)
 turtle.color('black')
 turtle.setheading(0)
 turtle.circle(60, 360)
 turtle.penup()
 turtle.setheading(90)
 turtle.fd(75)
 turtle.setheading(180)
 turtle.fd(20)
 turtle.pensize(4)
 turtle.pendown()
 turtle.circle(2, 360)
 turtle.setheading(0)
 turtle.penup()
 turtle.fd(40)
 turtle.pensize(4)
 turtle.pendown()
 turtle.circle(-2, 360)
 turtle.penup()
 turtle.goto(x, y)
 turtle.setheading(-90)
 turtle.pendown()
 turtle.fd(20)
 turtle.setheading(0)
 turtle.fd(35)
 turtle.setheading(60)
 turtle.fd(10)
 turtle.penup()
 turtle.goto(x, y)
 turtle.setheading(-90)
 turtle.pendown()
 turtle.fd(40)
 turtle.setheading(0)
 turtle.fd(35)
 turtle.setheading(-60)
 turtle.fd(10)
 turtle.penup()
 turtle.goto(x, y)
 turtle.setheading(-90)
 turtle.pendown()
 turtle.fd(60)
 turtle.setheading(-135)
 turtle.fd(60)
 turtle.bk(60)
 turtle.setheading(-45)
 turtle.fd(30)
 turtle.setheading(-135)
 turtle.fd(35)
 turtle.penup()
 
 
# 第一个画面,显示文字
def page0():
 turtle.penup()
 turtle.goto(-350, 0)
 turtle.color('black')
 turtle.write('专属于我们的情人节', font=('宋体', 60, 'normal'))
 time.sleep(3)
 
 
# 第二个画面,显示发射爱心的小人
def page1():
 turtle.speed(10)
 draw_people(-250, 20)
 turtle.penup()
 turtle.goto(-150, -30)
 draw_heart(14)
 turtle.penup()
 turtle.goto(-20, -60)
 draw_heart(25)
 turtle.penup()
 turtle.goto(250, -100)
 draw_heart(45)
 turtle.hideturtle()
 time.sleep(3)
 
 
# 最后一个画面,一箭穿心
def page2():
 turtle.speed(1)
 turtle.penup()
 turtle.goto(-200, -200)
 turtle.color('blue')
 turtle.pendown()
 turtle.write('ZBT CJH', font=('wisdom', 50, 'normal'))
 turtle.penup()
 turtle.goto(0, -180)
 draw_heart(10)
 arrow_heart(20, -60, 51)
 turtle.showturtle()
 
 
def main():
 turtle.setup(900, 500)
 page0()
 clear_all()
 page1()
 clear_all()
 page2()
 turtle.done()
 
 
main()

运行截图如下图所示,其中的姓名缩写可以自行修改。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

香港稳定服务器

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部