生成一个Python烟花代码
时间: 2023-12-25 07:28:35 浏览: 83
python实现烟花代码
以下是一个使用tkinter和PIL库生成Python烟花效果的代码:
```python
import tkinter as tk
from PIL import Image, ImageTk
import random
class Firework:
def __init__(self, canvas, x, y):
self.canvas = canvas
self.x = x
self.y = y
self.color = random.choice(['red', 'orange', 'yellow', 'green', 'blue', 'purple'])
self.size = random.randint(5, 15)
self.life = 10
self.particles = []
for i in range(50):
vx = random.uniform(-1, 1)
vy = random.uniform(-1, 1)
particle = canvas.create_oval(x, y, x+1, y+1, fill=self.color, outline='')
self.particles.append((particle, vx, vy))
def update(self):
for particle, vx, vy in self.particles:
self.canvas.move(particle, vx, vy)
vx *= 0.95
vy *= 0.95
self.life -= 1
if self.life == 0:
for particle, vx, vy in self.particles:
self.canvas.delete(particle)
class FireworkDisplay:
def __init__(self, master):
self.master = master
self.canvas = tk.Canvas(master, width=500, height=500)
self.canvas.pack()
self.fireworks = []
self.update()
def update(self):
for firework in self.fireworks:
firework.update()
self.fireworks = [fw for fw in self.fireworks if fw.life > 0]
if random.random() < 0.1:
x = random.randint(50, 450)
y = random.randint(50, 450)
fw = Firework(self.canvas, x, y)
self.fireworks.append(fw)
self.master.after(50, self.update)
root = tk.Tk()
app = FireworkDisplay(root)
root.mainloop()
```
该代码使用了面向对象的编程方式,定义了两个类:`Firework`和`FireworkDisplay`。`Firework`类表示一个烟花,包含了烟花的颜色、大小、寿命和粒子等信息。`FireworkDisplay`类表示整个烟花放映效果,包含了一个画布和多个烟花对象。
在`Firework`类的构造函数中,首先随机生成烟花的颜色和大小,然后生成50个粒子,每个粒子随机生成一个速度,并在画布上创建一个圆点。在`update`方法中,更新每个粒子的位置和速度,并逐渐减小速度,直到烟花的寿命结束,删除所有粒子。
在`FireworkDisplay`类的构造函数中,创建一个画布,并初始化一个空的烟花列表。在`update`方法中,更新所有烟花的状态,删除已经结束的烟花,并以一定的概率生成新的烟花。最后使用`after`方法定时调用`update`方法,实现动画效果。
阅读全文