当前位置: 首页 > java >正文

Python新春烟花

fireworks

系列文章

序号直达链接
Tkinter
1Python李峋同款可写字版跳动的爱心
2Python跳动的双爱心
3Python蓝色跳动的爱心
4Python动漫烟花
5Python粒子烟花
Turtle
1Python满屏飘字
2Python蓝色流星雨
3Python金色流星雨
4Python漂浮爱心
5Python爱心光波①
6Python爱心光波②
7Python满天繁星
8Python五彩气球
9Python白色飘雪
10Python七彩花朵
11Python 3D星空
12Python大雪纷飞
13Python一闪一闪亮星星
14Python爱心泡泡
15Python爱心射线
16Python圣诞礼物
17Python礼物圣诞树
18Python浪漫星空
19Python飞舞蝙蝠
20Python万圣礼物
21Python蓝色飘雪
Pygame
1Python跨年烟花
2Python炫酷烟花
3Python黑客帝国字母雨
敬请期待……

写在前面

Python实现炫酷新春烟花动画的完整代码。

技术需求

  1. Pygame库

    • Pygame 是一款专为游戏开发设计的Python库,提供图形渲染、事件管理、音频播放等核心功能。在本代码中,Pygame负责创建窗口、处理用户交互、绘制粒子、烟花及文字等元素。
  2. 粒子系统

    • 粒子系统 是一种用于模拟物理现象的技术,常用于实现爆炸、烟雾、火焰等视觉效果。在此段代码中,粒子系统被用来模拟烟花爆炸的效果。每个粒子具备位置、速度和生命周期等属性,并受重力影响,逼真地再现烟花爆炸后的飞散场景。
  3. 物理模拟

    • 在代码中,通过在 update() 方法中调整垂直速度 vy 来模拟重力对粒子的影响,使粒子逐渐加速下落,模仿现实生活中烟花爆炸后物体的运动轨迹。
  4. 随机数生成

    • 随机数生成 用于控制烟花的颜色、发射角度、速度和生命周期等参数。每当生成新的烟花时,程序会随机选择颜色、粒子数量和角度等,确保每次烟花展示都是独一无二的。
  5. 图形绘制

    • 利用 pygame.draw.circle() 函数绘制粒子和文字,生动展现烟花动态效果及“Happy New Year!”的祝福语。pygame.font.SysFont() 用于加载系统字体并绘制文本内容。
  6. 事件处理

    • 通过 pygame.event.get() 捕获并处理用户事件,如关闭窗口等操作,使程序能够响应用户输入,增强应用的交互体验。
  7. 动画控制

    • 使用 帧率控制(通过 clock.tick(FPS))确保动画流畅运行,并借助 time.sleep(0.05) 调整每帧更新速率,使烟花效果更加清晰呈现。
  8. 面向对象编程(OOP)

    • 定义 ParticleFirework 类,采用面向对象编程理念,将粒子和烟花的行为封装于不同类中,提升代码结构化程度,便于维护与扩展。

完整代码

import pygame
import random
import math
import time# Initialize Pygame
pygame.init()# Constants
SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 700
BACKGROUND_COLOR = (0, 0, 0)  # Black
FPS = 60# Screen setup
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('新春烟花')# Font setup using system default font
font = pygame.font.SysFont("Comic Sans MS", 100)  # You can replace "Arial" with any system font
text_color = (255, 255, 255)  # White color for the text# Particle class
class Particle:def __init__(self, x, y, color, angle, speed, life):self.x = xself.y = yself.color = colorself.angle = angleself.speed = speedself.life = lifeself.radius = 2self.vx = math.cos(angle) * speedself.vy = math.sin(angle) * speeddef update(self):self.x += self.vxself.y += self.vyself.life -= 1self.vy += 0.05  # Gravity effectdef draw(self):pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.radius)# Firework class
class Firework:def __init__(self, x, y, color, num_particles=100, spread=2 * math.pi):self.x = xself.y = yself.color = colorself.num_particles = num_particlesself.spread = spreadself.particles = []self.exploded = Falsedef explode(self):if not self.exploded:for _ in range(self.num_particles):angle = random.uniform(0, self.spread)speed = random.uniform(1, 3)life = random.randint(30, 50)particle = Particle(self.x, self.y, self.color, angle, speed, life)self.particles.append(particle)self.exploded = True
……

代码分析

这段代码运用Python的Pygame库,精心设计了一个动态的新春烟花展示效果。程序不仅模拟了烟花的发射、爆炸及粒子运动,还在屏幕中央呈现了“Happy New Year!”的温馨祝福。接下来,我们将从程序结构、核心功能、代码实现和细节等方面进行深入解析。

1. 程序结构

该程序由几个关键部分构成:

  • Pygame初始化与常量定义: 初始化Pygame库,并设定屏幕尺寸、背景色、帧率等基础参数。
  • Particle类: 定义烟花中粒子的行为特性,包括位置、速度和生命周期等。
  • Firework类: 负责烟花的爆炸效果及粒子生成与更新。
  • 主循环(main函数): 处理游戏事件、更新画面、控制烟花发射和文字显示。

2. Pygame初始化

pygame.init()

此行代码启动Pygame库,使程序能够利用其绘图、音效处理和事件管理等功能。

3. 常量与屏幕配置

SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 700
BACKGROUND_COLOR = (0, 0, 0)  # 黑色背景
FPS = 60

这里定义了窗口尺寸、背景颜色和帧率等常量,为程序的整体布局和动画流畅性奠定基础。

创建并设置Pygame窗口:

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('新春烟花')

pygame.display.set_mode()创建指定尺寸的屏幕,pygame.display.set_caption()则将窗口标题设为“新春烟花”。

4. 字体配置

font = pygame.font.SysFont("Comic Sans MS", 100)
text_color = (255, 255, 255)  # 白色文字

通过pygame.font.SysFont()选择“Comic Sans MS”字体,字号设为100,用于渲染屏幕上的祝福文字,文字颜色为白色。

5. Particle类

Particle类描述烟花中的单个粒子,包含位置、颜色、速度、角度和生命周期等属性。

class Particle:def __init__(self, x, y, color, angle, speed, life):self.x = xself.y = yself.color = colorself.angle = angleself.speed = speedself.life = lifeself.radius = 2self.vx = math.cos(angle) * speedself.vy = math.sin(angle) * speed

update()方法更新粒子位置,考虑重力影响:

def update(self):self.x += self.vxself.y += self.vyself.life -= 1self.vy += 0.05  # 模拟重力

draw()方法绘制粒子:

def draw(self):pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.radius)

6. Firework类

Firework类模拟烟花爆炸过程及粒子管理。

class Firework:def __init__(self, x, y, color, num_particles=100, spread=2 * math.pi):self.x = xself.y = yself.color = colorself.num_particles = num_particlesself.spread = spreadself.particles = []self.exploded = False

explode()方法生成爆炸时的粒子:

def explode(self):if not self.exploded:for _ in range(self.num_particles):angle = random.uniform(0, self.spread)speed = random.uniform(1, 3)life = random.randint(30, 50)particle = Particle(self.x, self.y, self.color, angle, speed, life)self.particles.append(particle)self.exploded = True

update()方法更新粒子状态并检查是否已爆炸:

def update(self):if not self.exploded:self.explode()for particle in self.particles:particle.update()

draw()方法绘制所有粒子:

def draw(self):for particle in self.particles:if particle.life > 0:particle.draw()

7. 主循环

主循环是程序的核心,负责事件处理、烟花发射、状态更新和文字显示。

  • 事件处理: 检查退出事件。
  • 烟花发射: 随机决定是否发射新烟花。
  • 更新与绘制烟花: 更新烟花状态并绘制。
  • 文字显示: 屏幕中央显示祝福文字。

8. 总结

此代码通过Pygame实现了生动的烟花效果,利用粒子系统模拟烟花爆炸后的动态行为,结合随机化技术确保每次爆炸的独特性。此外,主循环实时更新烟花状态并展示祝福文字,营造出浓厚的节日氛围。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

http://www.xdnf.cn/news/14565.html

相关文章:

  • 江科大STM32入门:DMA传输数据
  • CNN工作原理和架构
  • 【基础算法】贪心 (一) :简单贪心
  • Input事件处理引起卡顿
  • vue3+arcgisAPI4案例:智慧林业资源监测分析平台(附源码下载)
  • 55-Oracle-EXPLAIN PLAN(含23ai )实操
  • 终端里的AI黑魔法:OpenCode深度体验与架构揭秘
  • 启动hardhat 项目,下载依赖的npm问题
  • Taro 跨端应用性能优化全攻略:从原理到实践
  • 【设计模式】6.原型模式
  • FTTR+软路由网络拓扑方案
  • NY339NY341美光固态闪存NW841NW843
  • Flutter ListTile 深度解析
  • 西门子S7通信协议抓包分析应用
  • OSI网络通信模型详解
  • react扩展
  • 智能群跃小助手发布说明
  • 局域网文件共享及检索系统
  • 初学python的我开始Leetcode题10-2
  • 基于大模型的三叉神经痛预测及治疗方案研究报告
  • window显示驱动开发—使用状态刷新回调函数
  • WebGL图形学总结(二)
  • Spring Boot + MyBatis + Vue:从零到一构建全栈应用
  • linux线程同步
  • P7 QT项目----会学天气预报(完结)
  • 【内存】Linux 内核优化实战 - vm.max_map_count
  • HarmonyOS 6 + 盘古大模型5.5
  • 解决uni-app发布微信小程序主包大小限制为<2M的问题
  • 从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页
  • DAY 37 早停策略和模型权重的保存