用python画烟花的方法:首先创建一个所有粒子同时扩大的二维列表;然后实现粒子范围扩大,以自由落体坠落;接着移除超过最高时长的粒子;最后循环调用保持不停。

用python画烟花的方法:# -*- coding: utf-8 -*-

# Nola

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

# 模拟重力

GRAVITY = 0.05

# 颜色选项(随机或者按顺序)

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

'''

particles 类

粒子在空中随机生成随机,变成一个圈、下坠、消失

属性:

- id: 粒子的id

- x, y: 粒子的坐标

- vx, vy: 在坐标的变化速度

- total: 总数

- age: 粒子存在的时长

- color: 颜色

- cv: 画布

- lifespan: 最高存在时长

'''

class Particle:

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

self.x = x

self.y = y

self.initial_speed = explosion_speed

self.vx = vx

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))

# we technically don't need to update x, y because move will do the job

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

self.vy += GRAVITY * dt

# 移除超过最高时长的粒子

elif self.cid is not None:

cv.delete(self.cid)

self.cid = None

# 扩大的时间

def expand (self):

return self.age <= 1.2

# 粒子是否在最高存在时长内

def alive(self):

return self.age <= self.lifespan

'''

循环调用保持不停

'''

def simulate(cv):

t = time()

explode_points = []

wait_time = randint(10, 100)

numb_explode = randint(6, 10)

# 创建一个所有粒子同时扩大的二维列表

for point in range(numb_explode):

objects = []

x_cordi = randint(50, 550)

y_cordi = randint(50, 150)

speed = uniform(0.5, 1.5)

size = uniform(1, 3)

color = choice(colors)

explosion_speed = uniform(0.2, 1)

total_particles = randint(10, 50)

for i in range(1, total_particles):

r = Particle(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.8s内一直扩大

while total_time < 1.8:

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, simulate, cv)

def close(*ignore):

"""退出程序、关闭窗口"""

global root

root.quit()

if __name__ == '__main__':

root = tk.Tk()

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

# 绘制一个黑色背景

cv.create_rectangle(0, 0, 600, 400, fill='black')

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

# # 选一个好看的背景会让效果更惊艳!

# image = Image.open("./image.jpg")

# photo = ImageTk.PhotoImage(image)

#

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

cv.pack()

root.protocol("WM_DELETE_WINDOW", close)

root.after(100, simulate, cv)

root.mainloop()

实现效果图:

相关免费学习推荐:python视频教程

python循环画简单烟花_如何用python画烟花相关推荐

  1. python循环遍历文件夹_如何用Python实现目录遍历

    1. 基本实现 [root@localhost ~]# cat dirfile.py importos path='/tmp' for dirpath,dirnames,filenames inos. ...

  2. python画画用哪个软件_如何用python画韦恩图? 使用python的tutul工具,画一朵雏菊花...

    使用python的tutul工具,画一朵雏菊花 如何用python画韦恩图?不管什么时候,给心留一点空间.人生一世,不用什么都要去争,不是什么都要去抢,欲望少一点,满足多一点,这样才会活得潇洒一点,人 ...

  3. python画动物代码_如何用python画简单的动物_后端开发

    python3.x完全兼容python2.x吗?_后端开发 可以说是完全不兼容.相对于Python的早期版本,Python3是一个较大的升级,为了不带入过多的累赘,Python 3.0在设计的时候没有 ...

  4. 用python画简单的动物-如何用python画简单的动物

    首先来看一下实现效果,如下图: 具体实现代码请看: (推荐学习:python视频教程)# -*- coding:utf-8 -*-# __author__ :kusy# __content__:文件说 ...

  5. 用python画机器猫代码_如何用Python画一只机器猫?| 原力计划

    原标题:如何用Python画一只机器猫?| 原力计划 作者 | 人邮异步社区 责编 | 胡巍巍 出品 | CSDN博客 自信心是成功的源泉,对刚入门编程行业的初级程序员来说,多敲代码多做项目就是构建自 ...

  6. 用python画简单的图案-如何用Python画各种著名数学图案 | 附图+代码

    原标题:如何用Python画各种著名数学图案 | 附图+代码 用Python绘制著名的数学图片或动画,展示数学中的算法魅力. Mandelbrot 集 代码:46 lines (34 sloc) 1. ...

  7. 如何用python画爱心型线_如何用python画爱心

    用python绘制爱心的基本步骤如下: 首先先下载安装好python程序. 在我们自己的电脑上找到python 的IDLE工具. 2.然后打开IDLE,新建一个文件,命名为test1.py. 3.接着 ...

  8. python爬取微信好友_如何用 Python 爬取自己的微信朋友

    原标题:如何用 Python 爬取自己的微信朋友 作者 Alfred 本文转载自网络,如涉及侵权请及时联系我们 微信作为一款拥有将近9亿用户的超级APP,已经成为很多人生活中不可或缺的一部分,聊天.分 ...

  9. python能制作游戏吗_如何用python写一个小游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...

  10. python循环语句打印三角形_三角形最新:Python利用for循环打印星号三角形的案例_爱安网 LoveAn.com...

    关于"三角形"的最新内容 聚合阅读 这篇文章主要介绍了Python利用for循环打印星号三角形的案例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧... 这篇文章 ...

最新文章

  1. 利用HTML5开发Android
  2. java原始模型模式_java设计模式--原始模型模式
  3. 程序员只拿到5千工资吐槽无法生活,网友:别在意薪资
  4. Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现 - aspirant - 博客园
  5. 【转】设计模式 ( 十七) 状态模式State(对象行为型)
  6. 华为表示年内没有推出搭载鸿蒙操作系统手机的计划;OpenStack或被抛弃?iPhone至少还要三年可苹果自研5G调制解调器……...
  7. IDEA解决sun.misc.BASE64Encoder找不到jar包的解决方法
  8. 课题开题报告范文样本_成都汽车职业技术学校举行 2020年省、市、区课题开题报告会...
  9. 图文列表+欢迎页面+音乐控制小程序模板
  10. WPF标签页眉控件,其中包含滚动按钮,可移动标签项和每个标签中的关闭按钮
  11. matlab中的lsqcurvefit使用
  12. 早上起床后喝一杯白开水是非常有好处的
  13. 2018汪文君Google Guava实战
  14. 代码对比/归并/两个代码对比,对比代码
  15. 《人生哲理》一.我们必须活在当下!
  16. 在大学里计算机专业总分多少,计算机专业高考多少分录取?附中国计算机专业大学排名及分数线...
  17. c语言rsi2010中制运行,汇编语言初探(控制类指令)-来自第三章3.6的笔记-P135-P163
  18. 程序猿的一些幽默趣闻 个个经典
  19. 博途v14电脑要求_TIA博途V14安装的系统要求
  20. Python中类方法,静态方法,实例化方法

热门文章

  1. ks极速版cookies提取
  2. cf16-1代码什么意思_CF中的代码重用-第一部分
  3. android视频自定义渲染,十、Android视频框架PlayerBase#渲染流程
  4. 《JavaWeb系列教程》
  5. 基于局部极值的分水岭算法的圆斑点检测
  6. JavaScript 数组删除元素 避坑
  7. 用python画蝴蝶_Kittenblock画笔基础,移动留下痕迹的蝴蝶,图形化编程经验分享...
  8. 2022红明谷-部分Crypto
  9. 烈火如歌手游找回服务器,烈火如歌手游机缘任务触发前置条件大全 烈火如歌机缘任务攻略...
  10. android apk存储空间不足,安卓手机内存不足别乱清理!删掉这4个文件夹,瞬间释放10个G!...