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

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...