用python祝节日快乐_小年到了,用 Python 实现一场环保无污染的烟花秀,祝大家节日快乐...

本文主要是介绍用python祝节日快乐_小年到了,用 Python 实现一场环保无污染的烟花秀,祝大家节日快乐...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

烟花由中国古代人民较早发明,常用于盛大的典礼或表演中,也在除夕夜及元宵节中燃放用来烘托节日氛围。小年到了,但是近年来随着环境污染的加剧,一些地区已经禁止燃放烟花了,那我们就用 Python 实现一场无污染的烟花秀。

环境

操作系统:Windows

Python 版本:3.6

涉及模块:tkinter、PIL、time、random、math

实现

导入库

import tkinter as tk

from PIL import Image, ImageTk

from time import time, sleep

from random import choice, uniform, randint

from math import sin, cos, radians

烟花颜色

colors = ['red', 'blue', 'yellow', 'white', 'green', 'orange', 'purple', 'seagreen', 'indigo', 'cornflowerblue']

定义烟花类

class fireworks:

def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx=0., vy=0., size=2., color='red', lifespan=2, **kwargs):

self.id = idx

# 烟花绽放 x 轴

self.x = x

# 烟花绽放 x 轴

self.y = y

self.initial_speed = explosion_speed

# 外放 x 轴速度

self.vx = vx

# 外放 y 轴速度

self.vy = vy

# 绽放的粒子数

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)

self.lifespan = lifespan

# 更新数据

def update(self, dt):

self.age += dt

# 粒子膨胀

if self.alive() and self.expand():

move_x = cos(radians(self.id * 360 / self.total)) * self.initial_speed

move_y = sin(radians(self.id * 360 / self.total)) * self.initial_speed

self.cv.move(self.cid, move_x, move_y)

self.vx = move_x / (float(dt) * 1000)

# 膨胀到最大下落

elif self.alive():

move_x = cos(radians(self.id * 360 / self.total))

self.cv.move(self.cid, self.vx + move_x, self.vy + 0.5 * dt)

self.vy += 0.5 * dt

# 过期移除

elif self.cid is not None:

cv.delete(self.cid)

self.cid = None

# 定义膨胀效果的时间帧

def expand(self):

return self.age <= 1.5

# 检查粒子是否仍在生命周期内

def alive(self):

return self.age <= self.lifespan

燃放烟花

def ignite(cv):

t = time()

# 烟花列表

explode_points = []

wait_time = randint(10, 100)

# 爆炸的个数

numb_explode = randint(6, 10)

for point in range(numb_explode):

# 爆炸粒子列表

objects = []

# 爆炸 x 轴

x_cordi = randint(50, 550)

# 爆炸 y 轴

y_cordi = randint(50, 150)

speed = uniform(0.5, 1.5)

size = uniform(0.5, 3)

color = choice(colors)

# 爆炸的绽放速度

explosion_speed = uniform(0.2, 1)

# 爆炸的粒子数半径

total_particles = randint(10, 50)

for i in range(1, total_particles):

r = fireworks(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))

# 添加进粒子列表里

objects.append(r)

# 把粒子列表添加到烟花列表

explode_points.append(objects)

total_time = .0

# 在 1.8 秒时间帧内保持更新

while total_time < 1.8:

# 让画面暂停 0.01s

sleep(0.01)

# 刷新时间

tnew = time()

t, dt = tnew, tnew - t

# 遍历烟花列表

for point in explode_points:

# 遍历烟花里的粒子列表

for item in point:

# 更新时间

item.update(dt)

# 刷新页面

cv.update()

total_time += dt

root.after(wait_time, ignite, cv)

启动

if __name__ == "__main__":

root = tk.Tk()

# 绘制一个画布

cv = tk.Canvas(root, height=400, width=600)

# 背景图

image = Image.open("bg.jpg")

photo = ImageTk.PhotoImage(image)

# 在画板上绘制一张图片

cv.create_image(0, 0, image=photo, anchor='nw')

cv.pack()

root.protocol(close)

root.after(100, ignite, cv)

# 生成窗口

root.mainloop()

最终效果,如图所示:

21911c238def

这篇关于用python祝节日快乐_小年到了,用 Python 实现一场环保无污染的烟花秀,祝大家节日快乐...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635357

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部