python循环画简单烟花_如何用python画烟花
用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画烟花相关推荐
- python循环遍历文件夹_如何用Python实现目录遍历
1. 基本实现 [root@localhost ~]# cat dirfile.py importos path='/tmp' for dirpath,dirnames,filenames inos. ...
- python画画用哪个软件_如何用python画韦恩图? 使用python的tutul工具,画一朵雏菊花...
使用python的tutul工具,画一朵雏菊花 如何用python画韦恩图?不管什么时候,给心留一点空间.人生一世,不用什么都要去争,不是什么都要去抢,欲望少一点,满足多一点,这样才会活得潇洒一点,人 ...
- python画动物代码_如何用python画简单的动物_后端开发
python3.x完全兼容python2.x吗?_后端开发 可以说是完全不兼容.相对于Python的早期版本,Python3是一个较大的升级,为了不带入过多的累赘,Python 3.0在设计的时候没有 ...
- 用python画简单的动物-如何用python画简单的动物
首先来看一下实现效果,如下图: 具体实现代码请看: (推荐学习:python视频教程)# -*- coding:utf-8 -*-# __author__ :kusy# __content__:文件说 ...
- 用python画机器猫代码_如何用Python画一只机器猫?| 原力计划
原标题:如何用Python画一只机器猫?| 原力计划 作者 | 人邮异步社区 责编 | 胡巍巍 出品 | CSDN博客 自信心是成功的源泉,对刚入门编程行业的初级程序员来说,多敲代码多做项目就是构建自 ...
- 用python画简单的图案-如何用Python画各种著名数学图案 | 附图+代码
原标题:如何用Python画各种著名数学图案 | 附图+代码 用Python绘制著名的数学图片或动画,展示数学中的算法魅力. Mandelbrot 集 代码:46 lines (34 sloc) 1. ...
- 如何用python画爱心型线_如何用python画爱心
用python绘制爱心的基本步骤如下: 首先先下载安装好python程序. 在我们自己的电脑上找到python 的IDLE工具. 2.然后打开IDLE,新建一个文件,命名为test1.py. 3.接着 ...
- python爬取微信好友_如何用 Python 爬取自己的微信朋友
原标题:如何用 Python 爬取自己的微信朋友 作者 Alfred 本文转载自网络,如涉及侵权请及时联系我们 微信作为一款拥有将近9亿用户的超级APP,已经成为很多人生活中不可或缺的一部分,聊天.分 ...
- python能制作游戏吗_如何用python写一个小游戏
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...
- python循环语句打印三角形_三角形最新:Python利用for循环打印星号三角形的案例_爱安网 LoveAn.com...
关于"三角形"的最新内容 聚合阅读 这篇文章主要介绍了Python利用for循环打印星号三角形的案例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧... 这篇文章 ...
最新文章
- 利用HTML5开发Android
- java原始模型模式_java设计模式--原始模型模式
- 程序员只拿到5千工资吐槽无法生活,网友:别在意薪资
- Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现 - aspirant - 博客园
- 【转】设计模式 ( 十七) 状态模式State(对象行为型)
- 华为表示年内没有推出搭载鸿蒙操作系统手机的计划;OpenStack或被抛弃?iPhone至少还要三年可苹果自研5G调制解调器……...
- IDEA解决sun.misc.BASE64Encoder找不到jar包的解决方法
- 课题开题报告范文样本_成都汽车职业技术学校举行 2020年省、市、区课题开题报告会...
- 图文列表+欢迎页面+音乐控制小程序模板
- WPF标签页眉控件,其中包含滚动按钮,可移动标签项和每个标签中的关闭按钮
- matlab中的lsqcurvefit使用
- 早上起床后喝一杯白开水是非常有好处的
- 2018汪文君Google Guava实战
- 代码对比/归并/两个代码对比,对比代码
- 《人生哲理》一.我们必须活在当下!
- 在大学里计算机专业总分多少,计算机专业高考多少分录取?附中国计算机专业大学排名及分数线...
- c语言rsi2010中制运行,汇编语言初探(控制类指令)-来自第三章3.6的笔记-P135-P163
- 程序猿的一些幽默趣闻 个个经典
- 博途v14电脑要求_TIA博途V14安装的系统要求
- Python中类方法,静态方法,实例化方法
热门文章
- ks极速版cookies提取
- cf16-1代码什么意思_CF中的代码重用-第一部分
- android视频自定义渲染,十、Android视频框架PlayerBase#渲染流程
- 《JavaWeb系列教程》
- 基于局部极值的分水岭算法的圆斑点检测
- JavaScript 数组删除元素 避坑
- 用python画蝴蝶_Kittenblock画笔基础,移动留下痕迹的蝴蝶,图形化编程经验分享...
- 2022红明谷-部分Crypto
- 烈火如歌手游找回服务器,烈火如歌手游机缘任务触发前置条件大全 烈火如歌机缘任务攻略...
- android apk存储空间不足,安卓手机内存不足别乱清理!删掉这4个文件夹,瞬间释放10个G!...