爱心代码 python(以烟花为背景)

本教程通过Python实现了一个动态爱心烟花效果。使用了多线程来处理烟花爆炸的动画,并通过数学函数生成心形图案,结合随机性和粒子效果,使得整体画面更加生动。适用于情人节等浪漫场合。
该文章已生成可运行项目,

完整代码


# 开发时间: 2022/11/9 23:12
import math

import random
import threading
import time
from math import sin, cos, pi, log
from tkinter import *
import re

Fireworks = []
maxFireworks = 8
CANVAS_WIDTH = 1080  # 画布的宽
CANVAS_HEIGHT = 600  # 画布的高
CANVAS_CENTER_X = CANVAS_WIDTH / 2  # 画布中心的X轴坐标
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2  # 画布中心的Y轴坐标

IMAGE_ENLARGE = 12  # 放大比例
HEART_COLOR = "pink"  # 心的颜色


# 烟花类
class firework(object):
    def __init__(self, color, speed, width, height):
        # uid=uuid.uuid1()
        self.radius = random.randint(2,3)  # 粒子半径为2~3像素
        self.color = color  # 粒子颜色
        self.speed = speed  # speed是1.5-3.5秒
        self.status = 0  # 在烟花未爆炸的情况下,status=0;爆炸后,status>=1;当status>100时,烟花的生命期终止
        self.nParticle = random.randint(80, 100)  # 粒子数量
        self.center = [random.randint(0, width - 15), random.randint(0, height - 15)]  # 烟花随机中心坐标
        self.oneParticle = []  # 原始粒子坐标(100%状态时)
        self.rotTheta = random.uniform(-1, 2 * math.pi)  # 椭圆平面旋转角

        # 椭圆参数方程:x=a*cos(theta),y=b*sin(theta)
        # ellipsePara=[a,b]

        self.ellipsePara = [random.randint(30, 40), random.randint(20, 30)]
        theta = 2 * math.pi / self.nParticle
        for i in range(self.nParticle):
            t = random.uniform(-1.0 / 16, 1.0 / 16)  # 产生一个 [-1/16,1/16) 的随机数
            x, y = self.ellipsePara[0] * math.cos(theta * i + t), self.ellipsePara[1] * math.sin(
                theta * i + t)  # 椭圆参数方程
            xx, yy = x * math.cos(self.rotTheta) - y * math.sin(self.rotTheta), y * math.cos(
                self.rotTheta) + x * math.sin(self.rotTheta)  # 平面旋转方程
            self.oneParticle.append([xx, yy])

        self.curParticle = self.oneParticle[0:]  # 当前粒子坐标
        self.thread = threading.Thread(target=self.extend)  # 建立线程对象

    def extend(self):  # 粒子群状态变化函数线程
        for i in range(100):
           
本文章已经生成可运行项目
Python中,爱心烟花效果通常通过控制屏幕上的像素点,模拟烟花绽放的过程来实现。这需要一些基本的图形操作库,如Pillow(用于处理图像)和time(用于控制时间间隔)。下面是一个简单的爱心烟花动画的示例代码: ```python import time from PIL import Image, ImageDraw # 创建基础的爱心形状 def draw_heart(size): heart = Image.new('RGB', (size, size), "white") draw = ImageDraw.Draw(heart) draw.polygon([(size // 4, 0), (3 * size // 4, 0), (size // 2, size // 2), (size // 4, size), (0, size // 2), (size // 4, size)], fill="black", outline="white") return heart # 更新爱心位置并显示 def update_firework(canvas, heart, delay): heart_left, heart_top = canvas.size[0] - heart.width, canvas.size[1] // 2 canvas.paste(heart, (heart_left, heart_top)) heart_left -= 1 if heart_left < -heart.width: heart_left = canvas.size[0] - heart.width return canvas, heart_left # 主程序循环 def fireworks(): width, height = 600, 400 canvas = Image.new('RGB', (width, height), "black") heart = draw_heart(width // 2) for _ in range(height): # 烟花上升过程 canvas, heart_left = update_firework(canvas, heart, 5) # 每隔5秒移动一次 canvas.show() # 显示屏幕 time.sleep(0.05) # 控制帧率 fireworks() ``` 这个代码创建了一个黑色背景的窗口,并在一个循环中不断更新爱心的位置,使其从上往下"掉落",形成一种烟花的效果。注意,这个例子是在命令行窗口中运行的,如果要在其他环境下展示,可能需要修改显示部分。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值