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入门

相关内容

热门资讯

两代鸟的交谈作文【推荐3篇】 篇一:两代鸟的交谈近日,我在公园里目睹了一场令人惊叹的景象,一只年轻的鸟儿和一只老年鸟儿正在愉快地交...
一年级关于英雄事迹的作文50... 一年级关于英雄事迹的作文500字 篇一:《我的英雄》我的英雄是我的爸爸。他是一位普通的上班族,每天都...
记一件事小学生作文(精彩6篇... 记一件事小学生作文 篇一我和小狗的故事今天,我要给大家讲一个关于我和小狗的故事。这个故事发生在我上小...
抗击新型肺炎作文【通用5篇】 抗击新型肺炎作文 篇一:团结一心,共克时艰新型冠状病毒肺炎疫情突如其来,给我们的生活带来了巨大的冲击...
我可怜的橡皮泥状物作文【优质... 我可怜的橡皮泥状物作文 篇一橡皮泥是我最喜欢的玩具之一,可是它现在变得可怜兮兮的了。曾经,它是我快乐...
一年级作文水牛【经典6篇】 一年级作文水牛 篇一水牛是我国常见的牲畜之一,它们体型庞大,力大无穷,是农民朋友们的好帮手。今天,我...
我和我的好朋友作文【精彩6篇... 我和我的好朋友作文 篇一好朋友,是我们成长中最重要的陪伴。我有一个好朋友,她叫小芳。我们从小学开始就...
耳朵、鼻子和眼睛小学作文(推... 耳朵、鼻子和眼睛小学作文 篇一标题:我的耳朵、鼻子和眼睛我的耳朵、鼻子和眼睛是我身体上非常重要的器官...
课本剧表演作文(精选6篇) 课本剧表演作文 篇一我们班级最近进行了一次精彩的课本剧表演,给我们带来了很多乐趣和收获。这次表演的题...
最重要的一天小学作文【优选3... 最重要的一天小学作文 篇一最重要的一天小学作文今天是我人生中最重要的一天,因为我终于迎来了小学毕业典...
大爱无疆的作文(推荐6篇) 大爱无疆的作文 篇一无论身处何地,无论面对何种困境,大爱无疆的精神都是我们应该秉持的。在这个充满爱与...
二十年后的我小学作文(推荐6... 二十年后的我小学作文 篇一我是一名小学生,现在正在写一篇关于二十年后的我小学作文。在二十年后,我已经...
有趣的机器人小学优秀作文【通... 有趣的机器人小学优秀作文 篇一机器人小猫咪在一个不太远的未来,机器人成为了人们生活中不可或缺的一部分...
我最闪亮小学作文(优质3篇) 我最闪亮小学作文 篇一我最闪亮小学作文 我最闪亮小学作文 篇二第一篇内容标题:我最喜欢的老师作为一个...
鹭岛秋色秋游作文【最新3篇】 鹭岛秋色秋游作文 篇一鹭岛秋色秋游秋天是一年四季中最美丽的季节之一,而鹭岛也是一个恰如其分展现秋天之...
有趣的冬游小学作文(最新6篇... 有趣的冬游小学作文 篇一冬天是一个寒冷但又充满乐趣的季节。每当冬天来临,我就迫不及待地期待着一次有趣...
心情也有颜色作文(推荐3篇) 心情也有颜色作文 篇一心情也有颜色有时候,我们会发现自己的心情和颜色有着奇妙的联系。不同的心情会赋予...
我和神笔马良的一天作文【优质... 我和神笔马良的一天作文 篇一在一个阳光明媚的早晨,我迫不及待地来到了神笔马良的工作室。这是一个充满创...
大智若愚小学作文(精选3篇) 大智若愚小学作文 篇一大智若愚小学作文大智若愚是一种非常有意思的格言。它告诉我们,虽然我们可能很聪明...
《一九四二》观后感500字(... 《一九四二》观后感500字 篇一电影《一九四二》是一部由冯小刚导演的历史题材电影,该片以中国抗日战争...