python生日烟花动画
时间: 2025-01-03 14:43:22 浏览: 7
### 使用 Python 创建生日烟花动画
为了创建一个生动的生日烟花动画,可以利用 `pygame` 库的强大功能。此库不仅支持基本图形绘制还能够处理复杂的动画效果。
#### 安装 Pygame
首先安装 pygame 库,可以通过 pip 工具完成这一操作:
```bash
pip install pygame
```
#### 导入必要的模块并初始化环境
导入所需的包,并设置窗口大小和其他参数以便后续使用。
```python
import sys
import random
import math
import pygame
from pygame.locals import *
```
#### 设置屏幕尺寸与颜色定义
设定好显示界面的基础属性以及一些常用的颜色变量。
```python
SCREEN_SIZE = (800, 600)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
def main():
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE)
clock = pygame.time.Clock()
# 生日祝福文字配置
font = pygame.font.Font(None, 74)
text = font.render("Happy Birthday!", True, WHITE)
text_rect = text.get_rect(center=(SCREEN_SIZE[0]/2, SCREEN_SIZE[1]*0.9))
particles = []
```
#### 实现烟花粒子类 Particle
通过定义一个名为 `Particle` 的类来表示每一个单独的火花颗粒,其中包含了位置、速度等信息。
```python
class Particle:
def __init__(self, x, y):
self.x = x
self.y = y
self.life_time = 30 + random.randint(-10, 10) # 随机生命时间
angle = random.uniform(0, 2 * math.pi)
speed = random.uniform(2, 7)
self.vx = speed * math.cos(angle)
self.vy = -speed * math.sin(angle)
def update(self):
self.x += self.vx
self.y += self.vy
self.vy += 0.1 # 加重力影响
self.life_time -= 1
def draw(self, surface):
color = (random.randint(100, 255), random.randint(100, 255), random.randint(100, 255))
radius = max(1, int((self.life_time / 30)**2 * 5)) # 动态调整半径
pygame.draw.circle(surface, color, (int(self.x), int(self.y)), radius)
@property
def alive(self):
return self.life_time > 0
```
#### 主循环逻辑编写
最后,在主函数中加入事件监听器和更新机制,确保程序能响应用户的关闭请求并且持续刷新画面直到所有烟花消失为止。
```python
while True:
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
pygame.quit()
sys.exit()
screen.fill(BLACK)
# 添加新的烟花爆炸中心点
if random.random() < 0.05:
particles.append(Particle(random.randint(0, SCREEN_SIZE[0]), SCREEN_SIZE[1]))
new_particles = [] # 存储存活下来的粒子
for p in particles:
p.update()
p.draw(screen)
if p.alive:
new_particles.append(p)
particles = new_particles
screen.blit(text, text_rect) # 显示生日快乐的文字
pygame.display.flip()
clock.tick(60)
if __name__ == '__main__':
main()
```
这段代码实现了基础版本的生日烟花动画[^1]。在这个例子中,每当随机条件满足时就会触发一次烟花爆发的效果;同时屏幕上还会显示出“Happy Birthday!”字样作为庆祝的一部分。
阅读全文