逛逛主页
写在前面
预热情人节,用Python呈现满屏漂浮爱心!
漂浮爱心
完整代码
import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
tu.screensize(1.0, 1.0)
tu.title("Turtle漂浮爱心")
t = tu.Pen()
t.ht()
colors = ['pink']
class Heart(): # 每个爱心(爱心类)
def __init__(self):
self.r = ra.randint(10, 15) # 爱心的半径
self.x = ra.randint(-1000, 1000) # 爱心的横坐标
self.y = ra.randint(-500, 500) # 爱心的纵坐标
self.f = ra.uniform(-3.14, 3.14) # 爱心左右移动呈正弦函数
self.speed = ra.randint(5, 10) # 爱心移动速度
self.color = ra.choice(colors) # 爱心的颜色
self.outline = 1 # 爱心的外框大小(可不要)
def move(self): # 爱心移动函数
if self.y <= 500: # 当爱心还在画布中时
self.y += self.speed # 设置上下移动速度
self.x += self.speed * math.sin(self.f) # 设置左右移动速度
self.f += 0.1 # 可以理解成标志,改变左右移动的方向
else: # 当爱心漂出了画布时,重新生成一个爱心
self.r = ra.randint(10, 15)
self.x = ra.randint(-1000, 1000)
self.y = -500
self.f = ra.uniform(-3.14, 3.14)
self.speed = ra.randint(5, 10)
self.color = ra.choice(colors)
self.outline = 1
def draw(self): # 画爱心函数,就是用turtle画爱心
t.pensize(self.outline)
t.penup()
t.color(self.color)
t.goto(self.x, self.y)
t.pendown()
t.begin_fill()
t.fillcolor('pink')
t.setheading(120)
t.circle(self.r, 195)
t.fd(self.r * 2.4)
t.left(90)
t.forward(self.r * 2.4)
t.circle(self.r, 195)
t.end_fill()
Hearts = [] # 用列表保存所有爱心
for i in range(100):
Hearts.append(Heart())
tu.bgcolor('black')
while True: # 开始漂浮
tu.tracer(0)
t.clear()
for i in range(50): # 在画布中设置50个漂浮的爱心
Hearts[i].move()
Hearts[i].draw()
tu.update()
tu.mainloop()
**
代码分析**
该段代码是使用Python的turtle库编写的一个动画程序,它在屏幕上生成并持续更新多个随机漂浮的心形图案。以下是该程序的详细分析:
-
首先导入所需的模块:
turtle用于图形绘制,random用于生成随机数,math用于计算数学函数。 -
初始化turtle画布:
-
tu.setup(1.0, 1.0)设置窗口大小为单位宽度和高度。 -
tu.screensize(1.0, 1.0)将屏幕像素尺寸设为最大。 -
tu.title("Turtle漂浮爱心")设置窗口标题为“Turtle漂浮爱心”。
-
-
创建一个名为
Heart的类来表示每一个心形对象,具有以下属性:-
半径(
self.r)、横坐标(self.x)、纵坐标(self.y)都是随机生成的,确保每个心形的位置和大小不同。 -
self.f是一个随机初始值,用作正弦函数参数以控制心形左右移动的路径。 -
移动速度(
self.speed)、颜色(self.color)以及外框大小(self.outline)也是随机设置的。
-
-
在
Heart类中定义了两个方法:-
move()方法负责每帧更新心形的位置。通过改变y轴位置使其上下移动,并根据正弦函数改变x轴位置实现左右摇摆。当心形超出画布范围时,重新生成新的心形属性。 -
draw()方法利用turtle API绘制心形,包括设定笔触颜色、填充颜色、起始位置和绘制路径。
-
-
创建一个空列表
Hearts来存储多个Heart对象实例,初始化100个随机心形。 -
进入主循环,不断重绘心形并更新其位置:
-
使用
tracer(0)禁用turtle的默认渲染以提高性能。 -
清除画布上的所有内容。
-
遍历列表中的前50个心形(尽管实际创建了100个),让它们移动并重新绘制。
-
使用
t.update()刷新画面,显示当前所有心形的新位置。 -
循环会一直执行下去,直到用户关闭窗口。
-
综上所述,这段代码实现了在黑色背景上飘浮着随机大小、颜色、速度及轨迹的心形动画效果。心形的数量可以按需调整,这里虽然创建了100个心形对象,但在每一帧仅绘制了前50个。此外,代码还可以进一步优化,例如添加更多颜色选择、调整心形生成速率等。
运行结果
系列推荐
写在后面
**
如复制代码出现错误,可下载代码哦~**
公众号对话框内回复关键词:python030
输入提取码:idqr
我是一只有趣的兔子,感谢你的喜欢!
