Python制作粒子烟花,提前开始跨年?
创始人
2024-03-29 19:49:47
0

前言

跨年倒计时20天?我已经开始整烟花了,虽然不是很好看吧,但是也能将就看看 😥

这个的背景图,音乐,还有文字都是可以自己修改的哦

效果展示

在这里插入图片描述

导入库

import random
import pygame as py
import tkinter as tk
from time import time, sleep
from tkinter import filedialog
from PIL import Image, ImageTk
from math import sin, cos, radians
from random import choice, uniform, randint

实现代码

生成随机颜色

源码.点击领取即可


def randomcolor():#生成随机颜色colArr = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']color = ""for i in range(6):color += colArr[random.randint(0,14)]return "#"+colorGRAVITY = 0.06
#重力变量
colors = ['red', 'blue', 'yellow', 'white', 'green', 'orange', 'purple', 'seagreen','indigo', 'cornflowerblue', 'pink']
#颜色列表

属性

Generic class for particles
particles are emitted almost randomly on the sky, forming a round of circle (a star) before falling and getting removed
from canvas
Attributes(属性):- id: 粒子的id- x, y: 粒子的坐标- vx, vy: 粒子在对应坐标的变化速度- total:一颗烟花里的粒子总数- age: 粒子在画布上停留的时间- color: 自我移植- cv: 画布- lifespan: 粒子在画布上停留的时间

粒子运动的速度

这个里面的新年快乐是可以自己更改的哦

python学习交流Q群:309488165 ### 源码领取
class part:
#为每一个烟花绽放出来的粒子单独构建一个类的对象 ,每个粒子都会有一些重要的属性,决定它的外观(大小、颜色)、移动速度等def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx = 0., vy = 0., size=3., color = 'red', lifespan = 2, **kwargs):self.id = idx#每个烟花的特定标识符self.x = x#烟花绽放x轴self.y = y#烟花绽放y轴self.initial_speed = explosion_speed#粒子初始速度self.vx = vx#粒子运动x轴速度self.vy = vy#粒子运动y轴速度self.total = total#绽放粒子数self.age = 0#粒子已停留时间self.color = color#粒子颜色self.cv = cv#画布self.cid = self.cv.create_oval(x - size, y - size, x + size,y + size, fill=self.color, outline='white',width=0.01)#指定一个限定矩形(Tkinter 会自动在这个矩形内绘制一个椭圆)self.lifespan = lifespan#粒子在画布上停留的时间

xy轴移动位移

如果粒子仅存活不扩张(只是停留时间足够,说明膨胀到最大了),则自由坠落

        elif self.alive():columnFont = ('华文行楷',14)self.cv.create_text(250, 100, text='新',tag="write_tag", fill=choice(colors),font = columnFont) #字体self.cv.create_text(300, 100,  text='年',tag="write_tag", fill=choice(colors),font = columnFont)self.cv.create_text(350, 100, text='快',tag="write_tag", fill=choice(colors),font = columnFont)self.cv.create_text(400, 100,  text='乐',tag="write_tag", fill=choice(colors),font = columnFont)#删除文字标签move_x = cos(radians(self.id*360/self.total))#x轴的移动位移# we technically don't need to update x, y because move will do the jobself.cv.move(self.cid, self.vx + move_x, self.vy+GRAVITY*dt)self.vy += GRAVITY*dt#更新y轴

膨胀效果时间帧

判断膨胀时间是否小于1.2秒

    def expand (self):#定义膨胀效果时间帧return self.age <= 1.2

判断粒子是否仍在生命周期内

判断已停留时间是否小于应该停留时间

    def alive(self):#判断粒子是否仍在生命周期内return self.age <= self.lifespan

剩下代码

不想一步步写出来咯,有点麻烦哈哈

代码后面都有注释哈

源码.点击领取即可

def simulate(cv):python学习交流Q群:309488165 ### 源码领取 t = time()#返回自1970年后经过的浮点秒数,精确到小数点后7位explode_points = []#爆炸点列表,烟花列表wait_time = randint(10,100)#等待时间为10到100之间整数numb_explode = randint(8,20)#爆炸烟花个数时6到10之间的随机整数# create list of list of all particles in all simultaneous explosionfor point in range(numb_explode):#为所有模拟烟花绽放的全部粒子创建一列列表if point<=4:objects = []#每个点的爆炸粒子列表粒子列表x_cordi = 250 + point*50#每个爆炸点的x轴y_cordi = 100#每个爆炸点的y轴speed = uniform (0.5, 2.5)#每个爆炸点的速度size = uniform (0.5,3)#每个爆炸点的大小color = choice(colors)#每个爆炸点的颜色explosion_speed = uniform(0.6, 3)#爆炸的绽放速度total_particles = randint(10,60)#烟花的总粒子数for i in range(1,total_particles):#同一个烟花爆炸出来的粒子大小、速度、坐标都是相同的r = part(cv, idx = i, total = total_particles, explosion_speed = explosion_speed, x = x_cordi, y = y_cordi, vx = speed, vy = speed, color=color, size = size, lifespan = uniform(0.6,1.75))#把上述参数代入part函数,但是每个粒子的生存时间是自己独立的objects.append(r)#把r添加进粒子列表explode_points.append(objects)#把粒子列表添加进烟花列表else: objects = []#每个点的爆炸粒子列表粒子列表x_cordi = randint(50,550)#每个爆炸点的x轴y_cordi = randint(50, 250)#每个爆炸点的y轴speed = uniform (0.5, 2.5)#每个爆炸点的速度size = uniform (0.5,3)#每个爆炸点的大小color = choice(colors)#每个爆炸点的颜色explosion_speed = uniform(0.3, 2)#爆炸的绽放速度total_particles = randint(10,50)#烟花的总粒子数for i in range(1,total_particles):#同一个烟花爆炸出来的粒子大小、速度、坐标都是相同的r = part(cv, idx = i, total = total_particles, explosion_speed = explosion_speed, x = x_cordi, y = y_cordi, vx = speed, vy = speed, color=color, size = size, lifespan = uniform(0.6,1.75))#把上述参数代入part函数,但是每个粒子的生存时间是自己独立的objects.append(r)#把r添加进粒子列表explode_points.append(objects)#把粒子列表添加进烟花列表total_time = .0#初始化总时间# keeps undate within a timeframe of 1.8 second while total_time < 2:#当总时间小于1.8秒时运行该循环sleep(0.03)#让画面暂停0.01秒tnew = time()#刷新时间t, dt = tnew, tnew - t#时间等于新时间,和上次时间间隔为tnew-tfor point in explode_points:#遍历烟花列表for item in point:#遍历烟花里的粒子列表item.update(dt)#粒子更新时间cv.update()#刷新画布total_time += dt#为while循环增加时间root.after(wait_time, simulate, cv)#将组件置于其他组件之后,放在最顶层,覆盖下面的,递归调用自己,形成新一轮的爆炸def close(*ignore):#打开模拟循环并关闭窗口"""Stops simulation loop and closes the window."""global rootroot.quit()if __name__ == '__main__': root = tk.Tk() root.title('新年快乐~~')  # 设置窗体的标题栏cv = tk.Canvas(root, height=600, width=600)#绘制一个高600,宽600的画布 bgpath = filedialog.askopenfilename(title='请选择背景图片')#选择背景图片image = Image.open(bgpath)#打开背景图片image = image.resize((600,600), Image.ANTIALIAS)#把背景图片调整成窗口大小photo = ImageTk.PhotoImage(image) cv.create_image(0, 0, image=photo, anchor='nw')#在画布上绘制加载的背景图片 bgmusic = filedialog.askopenfilename(title='请选择背景音乐')py.mixer.init()# 初始化py.mixer.music.load(bgmusic)# 文件加载py.mixer.music.play(-1, 0, fade_ms=50)# 播放  第一个是播放值 -1代表循环播放, 第二个参数代表开始播放的时间py.mixer.music.pause() #暂停py.mixer.music.unpause()#取消暂停cv.pack()#把cv添加进去root.protocol("WM_DELETE_WINDOW", close)root.after(200, simulate, cv)#在0.1秒后再调用stimulate函数,生成一轮烟花绽放效果root.mainloop()#执行root,生成窗口

最后

今天的分享到这里就结束了

顺便给大家推荐一些Python视频教程,希望对大家有所帮助:

Python零基础教学合集

对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

上一篇: 黄昏的高中作文

下一篇:_001_Zotero入门

相关内容

热门资讯

小学元旦联欢会主持词开场白和... 小学元旦联欢会主持词开场白和结束词  根据活动对象的不同,需要设置不同的主持词。随着社会一步步向前发...
知识竞赛主持词 知识竞赛主持词(精选6篇)  主持词的写作需要将主题贯穿于所有节目之中。在人们越来越多的参与各种活动...
小学家长会学生欢迎词 小学家长会学生欢迎词小学家长会学生欢迎词文章标题:小学家长会学生欢迎词家长会欢迎辞亲爱的叔叔阿姨,爷...
消夏晚会主持词 2017消夏晚会主持词  漫漫暑假,天气越来越燥热,不妨在炎热的午后,参加一场纳凉晚会,欣赏社区带来...
周立波脱口秀台词 周立波脱口秀台词集锦四十岁之前喝酒是为了别人的一句~~厉害!醉了!!四十岁以后喝酒是为了自己的一句~...
圣诞节活动主持词节目串词 圣诞节活动主持词节目串词3篇  根据活动对象的不同,需要设置不同的主持词。在人们积极参与各种活动的今...
生日华诞主持词 生日华诞主持词范文各位领导,各位朋友,各位来宾,女士们,先生们:  中午好。  今天是个喜庆的日子,...
学术会议主持词 学术会议主持词  什么是主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动和集会...
订婚仪式及主持词 订婚仪式及主持词范文(通用3篇)  活动对象的不同,主持词的写作风格也会大不一样。在现在的社会生活中...
古剑奇谭欧阳少恭经典台词参考 古剑奇谭欧阳少恭经典台词参考  大型古装玄幻剧《古剑奇谭》正在湖南卫视热播,剧中,乔振宇饰演温文尔雅...
幼儿园晨会主持词 幼儿园晨会主持词  美好的一天从早上开始,从晨会开始,从大家的好的状态开始,从最好的开始。以下是小编...
诗文诵读展示主持词 诗文诵读展示主持词  主持词没有固定的格式,他的最大特点就是富有个性。在当今不断发展的世界,很多晚会...
大学生毕业典礼的主持词 大学生毕业典礼的主持词(精选5篇)  活动对象的不同,主持词的写作风格也会大不一样。在当下的社会中,...
婚礼的主持词 婚礼的主持词  婚礼的主持词(精选21篇)  主持词的写作要突出活动的主旨并贯穿始终。随着社会一步步...
主婚人致辞 主婚人致辞(精选6篇)  在生活、工作和学习中,大家都写过致辞吧,致辞具有很强的实用性和针对性。还在...
促销活动主持词 促销活动主持词  利用在中国拥有几千年文化的诗词能够有效提高主持词的感染力。在现今人们越来越重视活动...
小品活动的主持词 小品活动的主持词  【篇一】  各位亲爱的老师,同学们,大家下午好!  欢迎来到天津师范大学新闻传播...
森林报好词好句 森林报好词好句  好词:  小巧玲珑 飞云流雾 红日西垂 霞光四射 层峦叠嶂 水天相接  轻歌曼舞 ...