Python满屏漂浮爱心代码

picture.image

逛逛主页

picture.image

写在前面

预热情人节,用Python呈现满屏漂浮爱心!

picture.image

漂浮爱心

picture.image

完整代码


            
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()
        

**picture.image

代码分析**

picture.image

该段代码是使用Python的turtle库编写的一个动画程序,它在屏幕上生成并持续更新多个随机漂浮的心形图案。以下是该程序的详细分析:

  1. 首先导入所需的模块:turtle 用于图形绘制,random 用于生成随机数,math 用于计算数学函数。

  2. 初始化turtle画布:

    • tu.setup(1.0, 1.0) 设置窗口大小为单位宽度和高度。

    • tu.screensize(1.0, 1.0) 将屏幕像素尺寸设为最大。

    • tu.title("Turtle漂浮爱心") 设置窗口标题为“Turtle漂浮爱心”。

  3. 创建一个名为Heart的类来表示每一个心形对象,具有以下属性:

    • 半径(self.r)、横坐标(self.x)、纵坐标(self.y)都是随机生成的,确保每个心形的位置和大小不同。

    • self.f 是一个随机初始值,用作正弦函数参数以控制心形左右移动的路径。

    • 移动速度(self.speed)、颜色(self.color)以及外框大小(self.outline)也是随机设置的。

  4. Heart类中定义了两个方法:

    • move() 方法负责每帧更新心形的位置。通过改变y轴位置使其上下移动,并根据正弦函数改变x轴位置实现左右摇摆。当心形超出画布范围时,重新生成新的心形属性。

    • draw() 方法利用turtle API绘制心形,包括设定笔触颜色、填充颜色、起始位置和绘制路径。

  5. 创建一个空列表Hearts来存储多个Heart对象实例,初始化100个随机心形。

  6. 进入主循环,不断重绘心形并更新其位置:

    • 使用tracer(0)禁用turtle的默认渲染以提高性能。

    • 清除画布上的所有内容。

    • 遍历列表中的前50个心形(尽管实际创建了100个),让它们移动并重新绘制。

    • 使用t.update()刷新画面,显示当前所有心形的新位置。

    • 循环会一直执行下去,直到用户关闭窗口。

综上所述,这段代码实现了在黑色背景上飘浮着随机大小、颜色、速度及轨迹的心形动画效果。心形的数量可以按需调整,这里虽然创建了100个心形对象,但在每一帧仅绘制了前50个。此外,代码还可以进一步优化,例如添加更多颜色选择、调整心形生成速率等。

picture.image

运行结果

picture.image

picture.image

picture.image

系列推荐

picture.image

浪漫的HTML跳动爱心代码(满屏飘字)

炫酷的Html动态爱心代码

C语言实现跳动的爱心完整代码

Python李峋同款跳动的爱心代码(可写字版)

如何用Java实现一个可以写字的动态爱心

一起用C语言画个爱心吧!

HTML超好看的蓝色爱心

"愿得一人心,白首不分离"

是谁的心啊~

picture.image

写在后面

**picture.image

如复制代码出现错误,可下载代码哦~**

picture.image

公众号对话框内回复关键词:python030

输入提取码:idqr

picture.image

我是一只有趣的兔子,感谢你的喜欢!

0
0
0
0
评论
未登录
暂无评论