python动态烟花
时间: 2024-12-27 10:19:09 浏览: 19
### 使用Python实现动态烟花效果
#### pygame库实现动态烟花效果
在Python中利用`pygame`库可以创建生动的视觉效果,包括模拟烟花爆炸。下面是一段基于`pygame`库构建简单烟花动画的例子[^1]:
```python
import random
import pygame
from math import sin, cos, radians
# 初始化Pygame并设置屏幕尺寸
pygame.init()
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode([screen_width, screen_height])
class Firework:
def __init__(self):
self.x = random.randint(50, screen_width - 50)
self.y = screen_height
self.color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
self.speed = random.uniform(-7, 7)
def move(self):
if self.y > 0:
self.y -= abs(self.speed)*3
else:
explode(self)
def draw_fireworks(fireworks_list):
for firework in fireworks_list[:]:
pygame.draw.circle(screen, firework.color, (int(firework.x), int(firework.y)), 4)
firework.move()
def create_particle(x, y, color):
angle = radians(random.randint(0, 360))
speed = random.uniform(0.5, 2.5)
particle_x = x + cos(angle) * speed*speed*10
particle_y = y + sin(angle) * speed*speed*10
particles.append(Particle(particle_x, particle_y, color))
particles = []
class Particle():
def __init__(self,x,y,color):
self.x=x
self.y=y
self.color=color
self.age=0
def move(self):
self.age+=0.15
if self.age>=4:
particles.remove(self)
else:
self.y-=cos(self.age)**4-6
self.x+=sin(self.age*3)/20*self.age**4
pygame.draw.circle(screen,self.color,(int(self.x),int(self.y)),int((6-self.age)*0.8))
def explode(firework):
for _ in range(100):
create_particle(firework.x,firework.y,firework.color)
running=True
while running:
screen.fill((0, 0, 0))
for event in pygame.event.get():
if event.type==pygame.QUIT:
running=False
if random.random() < 0.1:
fireworks_list.append(Firework())
draw_fireworks(fireworks_list)
for p in particles:
p.move()
pygame.display.flip()
pygame.time.Clock().tick(60)
pygame.quit()
```
此代码定义了一个名为`Firework`的对象类表示单个上升到空中然后爆裂成许多粒子的小火箭;另一个对象类`Particle`代表由每个烟花产生的碎片。通过不断更新它们的位置并在屏幕上重绘这些物体,实现了连续播放的效果。
对于希望进一步探索不同类型的烟花图案或是优化现有程序性能的人而言,还可以尝试调整参数、增加更多种类的颜色组合以及引入物理特性如空气阻力等来增强真实感[^4]。
阅读全文