首页 > 分享 > 有点趣味性的python代码——燃放烟花

有点趣味性的python代码——燃放烟花

# 使用Python和Pygame创建惊艳的烟花表演

你有没有想过在不离开桌子的情况下就能看到一场烟花表演?Python的Pygame库使得创建有趣的视觉效果变得出乎意料的简单,包括色彩斑斓的烟花。在这篇博客中,我将向你展示如何构建一个生动的烟花表演,你可以直接在电脑上运行。

### 场景设置

为了创建我们的烟花表演,我们将使用Pygame——一个流行的Python库,用于制作2D游戏。首先,我们将设置显示窗口,初始化颜色,并准备主要组件。以下是基本设置:

```python
import pygame
import random
import math
import time

# 初始化pygame
pygame.init()

# 设置显示窗口
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("烟花表演")

# 颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
PINK = (255, 105, 180)
YELLOW = (255, 255, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
PURPLE = (128, 0, 128)
ORANGE = (255, 165, 0)
```

这里,我们设置了一个800x600像素的窗口,烟花的魔法将在这里发生。我们还定义了将在整个表演中使用的几种颜色。

### 定义烟花类

烟花表演的核心是`Firework`类,它处理每个烟花的移动、爆炸和粒子效果。每个烟花从屏幕底部开始,向上移动,最终爆炸成多个彩色粒子。

让我们一步一步拆解`Firework`类:

```python
class Firework:
    def __init__(self):
        self.x = random.randint(100, WIDTH - 100)
        self.y = HEIGHT
        self.target_y = random.randint(100, 300)
        self.color = random.choice([RED, BLUE, GREEN, PURPLE, ORANGE, YELLOW])
        self.radius = 5
        self.exploded = False
        self.particles = []
```

在构造函数中,烟花在屏幕底部的随机位置初始化,并目标到达一定的高度。我们还为每个烟花随机选择一个颜色,使表演更加多样化。

### 创建爆炸效果

烟花上升到目标高度后爆炸,爆炸会产生多个粒子向四周移动,模拟真实的烟花效果。

```python
def explode(self):
    self.exploded = True
    num_particles = 50
    for _ in range(num_particles):
        angle = random.uniform(0, 2 * math.pi)
        speed = random.uniform(2, 5)
        px = self.x
        py = self.y
        p_radius = random.uniform(3, 5)
        p_color = random.choice([RED, BLUE, GREEN, PURPLE, ORANGE, YELLOW])
        vx = math.cos(angle) * speed
        vy = math.sin(angle) * speed
        self.particles.append((px, py, vx, vy, p_radius, p_color))
```

每个烟花会爆炸成50个粒子。每个粒子被赋予一个随机方向和速度,创造出一种混乱的爆炸效果。粒子随着下降逐渐消失,就像真实的烟花表演一样。

### 更新和绘制烟花

`update()`和`draw()`方法控制烟花的移动和如何在屏幕上显示:

- **`update()`**: 这个方法控制烟花的移动并更新爆炸后每个粒子的状态。
- **`draw()`**: 这个方法在屏幕上绘制烟花和它们的粒子。

以下是我们如何管理烟花和粒子的移动:

```python
def update(self):
    if not self.exploded:
        self.y -= 5
        if self.y <= self.target_y:
            self.explode()
    else:
        new_particles = []
        for px, py, vx, vy, p_radius, p_color in self.particles:
            px += vx
            py += vy
            vy += 0.1  # 重力效果
            p_radius -= 0.05
            if p_radius > 0:
                new_particles.append((px, py, vx, vy, p_radius, p_color))
        self.particles = new_particles
```

粒子受到重力影响(`vy += 0.1`),因此在爆炸后会逐渐下落。每个粒子也会逐渐缩小(`p_radius -= 0.05`),直到它消失。

### 整合所有部分:主循环

最后,我们有一个主循环,将所有部分结合在一起:

```python
def main():
    clock = pygame.time.Clock()
    running = True
    fireworks = [Firework() for _ in range(3)]
    fade_alpha = 5  # 用于淡出效果
    overlay = pygame.Surface((WIDTH, HEIGHT))
    overlay.fill(BLACK)

         while running:
        screen.fill(BLACK)
        for firework in fireworks:
            firework.update()
            firework.draw(screen)

                 # 添加淡出效果
        overlay.set_alpha(fade_alpha)
        screen.blit(overlay, (0, 0))

                 pygame.display.flip()
        clock.tick(30)

                 # 检查所有烟花是否都已爆炸且粒子消失,然后重置
        if all(firework.exploded and not firework.particles for firework in fireworks):
            time.sleep(2)
            fireworks = [Firework() for _ in range(3)]

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

    pygame.quit()
```

在这个循环中,我们创建了一个烟花数组,并在每一帧中更新它们。如果所有烟花都完成爆炸,我们就创建新的烟花。循环一直运行,直到用户关闭窗口。

结论

通过几行Python代码,我们创建了一个色彩斑斓、动态有趣的烟花表演!这个例子展示了如何使用Pygame创建有趣且视觉吸引力强的效果,使其成为游戏开发和创意项目的绝佳工具。

你可以自由修改这个代码,添加更多效果或不同类型的烟花。你可以添加不同的形状、新的颜色,甚至将烟花与音乐同步,以创造更身临其境的体验。可能性是无穷的!

如果你喜欢这个教程,一定要尝试自己制作烟花表演。祝你编码愉快,享受属于你个人的烟花秀!

import pygame

import random

import math

import time

pygame.init()

WIDTH, HEIGHT = 800, 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))

pygame.display.set_caption("Fireworks Show")

BLACK = (0, 0, 0)

WHITE = (255, 255, 255)

RED = (255, 0, 0)

PINK = (255, 105, 180)

YELLOW = (255, 255, 0)

BLUE = (0, 0, 255)

GREEN = (0, 255, 0)

PURPLE = (128, 0, 128)

ORANGE = (255, 165, 0)

class Firework:

def __init__(self):

self.x = random.randint(100, WIDTH - 100)

self.y = HEIGHT

self.target_y = random.randint(100, 300)

self.color = random.choice([RED, BLUE, GREEN, PURPLE, ORANGE, YELLOW])

self.radius = 5

self.exploded = False

self.particles = []

def update(self):

if not self.exploded:

self.y -= 5

if self.y <= self.target_y:

self.explode()

else:

new_particles = []

for px, py, vx, vy, p_radius, p_color in self.particles:

px += vx

py += vy

vy += 0.1

p_radius -= 0.05

if p_radius > 0:

new_particles.append((px, py, vx, vy, p_radius, p_color))

self.particles = new_particles

def draw(self, surface):

if not self.exploded:

pygame.draw.circle(surface, self.color, (self.x, self.y), self.radius)

else:

for px, py, _, _, p_radius, p_color in self.particles:

pygame.draw.circle(surface, p_color, (int(px), int(py)), int(p_radius))

def explode(self):

self.exploded = True

num_particles = 50

for _ in range(num_particles):

angle = random.uniform(0, 2 * math.pi)

speed = random.uniform(2, 5)

px = self.x

py = self.y

p_radius = random.uniform(3, 5)

p_color = random.choice([RED, BLUE, GREEN, PURPLE, ORANGE, YELLOW])

vx = math.cos(angle) * speed

vy = math.sin(angle) * speed

self.particles.append((px, py, vx, vy, p_radius, p_color))

def main():

clock = pygame.time.Clock()

running = True

fireworks = [Firework() for _ in range(3)]

fade_alpha = 5

overlay = pygame.Surface((WIDTH, HEIGHT))

overlay.fill(BLACK)

while running:

screen.fill(BLACK)

for firework in fireworks:

firework.update()

firework.draw(screen)

overlay.set_alpha(fade_alpha)

screen.blit(overlay, (0, 0))

pygame.display.flip()

clock.tick(30)

if all(firework.exploded and not firework.particles for firework in fireworks):

time.sleep(2)

fireworks = [Firework() for _ in range(3)]

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

pygame.quit()

if __name__ == "__main__":

main()

相关知识

python玫瑰花代码简单
python玫瑰花代码讲解
python运行出玫瑰花的代码
python 生成玫瑰花代码
Python表白代码:5个步骤,用代码打造独一无二的表白
Python画玫瑰花完整代码
python画栀子花代码
python画玫瑰花代码简单
python程序员实现表白代码的案例
python画一朵花的代码

网址: 有点趣味性的python代码——燃放烟花 https://m.huajiangbk.com/newsview1541937.html

所属分类:花卉
上一篇: 上海金山城市沙滩烟花节海上升花烟
下一篇: 它叫“蒙娜丽莎”,别以为是世界名