Python爱心泡泡

目录

写在前面

1. 初始化

2. 颜色生成

3. 爱心类的定义

4. 爱心的移动方法

5. 爱心的绘制方法

6. 主循环

总结


写在前面

教你用Python的Turtle库实现爱心泡泡的动画效果,总体分为几大部分:初始化、颜色生成、爱心类的定义、爱心的移动和绘制、以及主循环。

1. 初始化

import turtle
import random
import math
​
# 初始化
turtle.setup(1.0, 1.0)
turtle.title('爱心泡泡')
turtle.bgcolor("#000000")
t = turtle.Pen()
t.ht()

这段代码首先导入了所需的库:turtlerandom 和 mathturtle是Python的一个标准库,用于绘制图形;random库用于生成随机数;math库则提供了数学函数的支持。接下来,代码设置了Turtle窗口的大小为全屏(turtle.setup(1.0, 1.0)),窗口的标题为“爱心泡泡” (turtle.title('爱心泡泡')),背景颜色为黑色(turtle.bgcolor("#000000"))。

然后,创建了一个Turtle对象t = turtle.Pen(),并将其隐藏起来 (t.ht()),因为在这个动画效果中,我们只需要显示爱心,不需要显示画笔本身。

2. 颜色生成

colors = []
t_list = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]

for i in t_list:
    t_str = "#ff00"
    for j in t_list:
        colors.append(t_str + i + j)

这一部分代码生成了一组颜色,并将其存储在colors列表中。这里的colors列表中的每个元素都是一个字符串,表示一种颜色的十六进制值。代码通过双重循环,组合不同的字符生成不同的颜色。最终生成的颜色是以#ff00开头的颜色,即红色和绿色分量固定,蓝色分量在变化。这将创建一个范围从红色到粉色的颜色序列。

3. 爱心类的定义

class Love():
    def __init__(self):
        # 定义变量
        self.r = random.randint(4, 10)
        self.x = random.randint(-900, 700)
        self.y = random.randint(-400, 400)
        self.i = random.randint(0, 10)
        self.color = random.choice(colors)
        self.speed = random.randint(1, 8)

Love类是整个动画的核心,它定义了每个爱心泡泡的属性和行为。在__init__方法中,初始化了一些属性:

  • self.r: 爱心的半径,使用随机数生成,范围在4到10之间。

  • self.x 和 self.y: 爱心的位置坐标,x在-900到700之间,y在-400到400之间,表示在屏幕上随机分布。

  • self.i: 控制爱心运动的参数,初始值为0到10之间的随机整数。

  • self.color: 爱心的颜色,从之前生成的colors列表中随机选择。

  • self.speed: 爱心的移动速度,范围在1到8之间。

4. 爱心的移动方法

def move(self):
    # 通过y坐标来控制爱心
    if self.y <= 500:
        self.y += 2.5 * self.speed
        self.x = self.x + 1.5 * math.sin(self.i) * math.sqrt(self.i) * self.speed
        self.i = self.i + 0.1
    else:
        self.y = -700
        self.r = random.randint(5, 20)
        self.x = random.randint(-900, 700)
        self.i = 0
        self.color = random.choice(colors)
        self.speed = random.randint(1, 8)

move方法控制爱心泡泡的移动。当爱心的y坐标小于等于500时,爱心向上移动,其y坐标增加一个值,这个值是基于其速度的2.5倍。同时,x坐标根据一个正弦函数变化,这使得爱心的运动轨迹更加自然,呈现出一些波动感。i是一个控制运动的变量,它随着每次移动而增加。

y坐标超过500时,这意味着爱心已经飞出了屏幕,于是重新初始化一些属性,使爱心从底部重新出现。通过重新随机化爱心的半径、位置、颜色和速度,确保每次出现的爱心都不同,增加了动画的丰富性。

5. 爱心的绘制方法

def draw(self):
    # 绘制爱心
    t.pensize(self.r // 2)
    t.penup()
    t.color(self.color, self.color)
    t.goto(self.x, self.y)
    t.pendown()
    # 设置角度
    t.setheading(60)
    t.circle(self.r, 255)
    t.fd(2.4 * self.r)
    t.left(90)
    t.fd(2.4 * self.r)
    t.circle(self.r, 255)

draw方法用于在屏幕上绘制爱心。首先,通过设置画笔的粗细(pensize),提高绘制效果。然后,使用penuppendown来控制画笔的抬起和落下,避免在移动过程中留下不必要的轨迹。接着设置画笔颜色为当前爱心的颜色,并移动到爱心的当前位置。

设置初始绘制方向为60度,然后使用circle函数绘制一个圆弧形状,接着用fdleft函数绘制爱心的底部部分。通过这种组合,形成了一个典型的爱心形状。

6. 主循环

love = []
for i in range(100):
    love.append(Love())

while True:
    turtle.tracer(0)
    t.clear()
    for i in range(80):
        love[i].move()
        love[i].draw()
    turtle.tracer(1)

主循环部分首先创建一个love列表,并在其中存储100个Love对象,代表100个爱心泡泡。进入无限循环后,turtle.tracer(0)设置Turtle动画效果的刷新率为0,即关闭自动刷新,这样可以在t.clear()turtle.tracer(1)之间的代码段中同时更新屏幕中的多个元素,以避免闪烁和提高动画效果的流畅性。

在每一帧中,t.clear()清除上一帧的绘制内容,然后遍历love列表中的前80个爱心对象,调用它们的movedraw方法,使其移动和重新绘制。最后,turtle.tracer(1)恢复自动刷新,将新的一帧显示在屏幕上。

总结

整个代码利用Python的Turtle库,创建多个Love对象,实现了一个动态的爱心泡泡动画。每个爱心都有自己的颜色、位置、大小和速度,并且在屏幕上以一种平滑的方式移动。通过随机化这些参数,确保了动画的丰富多样性,使得整个效果显得非常有趣且富有生命力。

最后给大家推荐一些往期的精彩内容。

序号直达链接
表白系列
1Python制作一个无法拒绝的表白界面
2Python满屏飘字表白代码
3Python无限弹窗满屏表白代码
4Python李峋同款可写字版跳动的爱心
5Python流星雨代码
6Python漂浮爱心代码
7Python爱心光波代码
8Python普通的玫瑰花代码
9Python炫酷的玫瑰花代码
10Python多彩的玫瑰花代码
节日系列
1Python动漫风烟花秀代码
2Python新年烟花秀代码
3Python圣诞礼物代码
4Python画圣诞树代码
5Python可爱版圣诞树丨绿色
6Python可爱版圣诞树丨粉色
7Python大雪纷飞代码
8Python生日蛋糕代码
9Python五彩气球代码
10Python国庆祝福代码
11Python万圣礼物代码
12Python愚人节礼物代码
13Python浪漫星空代码
14Python樱花树代码
动漫系列
1Python名侦探柯南
2Python喜羊羊
3Python懒羊羊
4Python沸羊羊
5Python小灰灰
6Python小香香
7Python灰太狼
8Python海绵宝宝
9Python哆啦A梦
10Python凯蒂猫
11Python猫和老鼠
12Python草莓熊
13Python迷你皮卡丘
14Python高级皮卡丘
15Python豪华皮卡丘
16Python史迪仔
17Python小熊猫
18Python蜘蛛侠
19Python可爱版蜡笔小新
20Python萌萌的蜡笔小新
21Python罗小黑
22Python猪猪侠
炫酷系列
1  Python张万森下雪了
2Python一闪一闪亮晶晶
3Python黑客帝国代码雨
4Python七彩花朵
5Python模拟3D星空
6Python金榜题名
7Python满天星
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Want595

感谢小伙伴的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值