[python] 过年燃放烟花
目录
新年祝福语
一、作品展示
二、作品所用资源
三、代码与资源说明
四、代码库
五、完整代码
六、总结
新年祝福语
岁月总是悄然流转,让人感叹时间的飞逝,转眼间又快到了中国传统的新年(龙年)。
回首过去,我们经历了许多挑战,也收获了成长。展望未来,我们充满期待。
在这特别的时刻,我想对所有粉丝送上真挚祝福。愿新年带给你们无尽的快乐与幸福,健康与平安。
感谢你们的支持,新的一年我将继续努力创造更多精彩。
祝大家新年快乐!
一、作品展示
以下是我用 [python] 制作的一个新年小作品,希望大家喜欢(龙年背景图是免费下载的)!

二、作品所用资源
由于 pygame 本身不支持中文显示,所以需要自行下载中文字体,而其自带的数字字体不好看,所以也一并下载了(代码中的字体与背景图大家自行更换)。
1. 小清新中文字体
2. 立体数字字体
3. 免费的背景图

三、代码与资源说明
百度云盘完整资源下载:新年快乐
这里展示代码与资源存放位置,是为了方便大家看代码时容易理解其中的内容。


四、代码库
本文主要用到了以下四个库。如果大家还没安装,可以 win + r 输入 cmd 安装。
pip install pygame
pip install random
pip install math
pip install os
五、完整代码
以下是完整的代码。其中,爆竹音效我没有添加,但有预留实现接口,大家如果感兴趣可以网上找相应的音频文件,并且将已注释的接口打开来播放即可。
import pygame
import random
import math
import os# 初始化pygame
pygame.init()# 设置窗口大小和标题
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Fireworks")# 加载动态背景图
bg_images = []
for i in range(1, 3): # 替换为你的动态背景图文件名的范围image_path = f"D:\\share\\python\\HappNewYear\\pic\\dragon_animation_{i}.png" # 替换为你的动态背景图路径image = pygame.image.load(image_path).convert()bg_images.append(image)# 加载爆炸音效
# explosion_sound = pygame.mixer.Sound('explosion.wav')# 定义烟花线条类
class FireworkParticle(pygame.sprite.Sprite):def __init__(self, x, y, color):super().__init__()self.color = colorself.length = random.randint(5, 15) # 线条长度self.angle = random.uniform(0, 2 * math.pi)self.speed = random.uniform(1, 5)self.dx = self.speed * math.cos(self.angle)self.dy = self.speed * math.sin(self.angle)self.gravity = 0.1self.x = xself.y = ydef update(self):self.x += self.dxself.y += self.dyself.dy += self.gravitydef draw(self, screen):end_x = self.x + self.length * math.cos(self.angle)end_y = self.y + self.length * math.sin(self.angle)pygame.draw.line(screen, self.color, (self.x, self.y), (end_x, end_y), 2) # 绘制线条# 颜色列表
colors = [(253, 215, 88), (254, 254, 252), (255, 255, 217), (252, 253, 249), (248, 247, 106), (255, 255, 162)]# 字体显示
font_path = os.path.join(os.path.dirname(__file__), 'font_ttf\\xiaoqingxin.ttf')
zn_font = pygame.font.Font(font_path, 100)
def font_show(font, string, color):text = font.render(string, True, color)text_rect = text.get_rect(center=(screen_width // 2, screen_height // 2))screen.blit(text, text_rect)# 烟花爆炸函数
def explode(x, y, timeout):# explosion_sound.play() # 播放爆炸音效particles = pygame.sprite.Group()for _ in range(1000): #燃放的烟火密度,值越大越好看color = random.choice(colors)particle = FireworkParticle(x, y, color) # 烟花燃放位置particles.add(particle)# 爆炸动画循环current_bg_image = 0 # 当前显示的背景图索引last_explode_time = pygame.time.get_ticks()while True:current_time = pygame.time.get_ticks()if current_time - last_explode_time >= timeout:break # 退出循环particles.update()# 切换背景图if current_time % 50 == 0: # 每50毫秒切换一次背景图current_bg_image = (current_bg_image + 1) % len(bg_images)screen.blit(bg_images[current_bg_image], (0, 0)) # 绘制背景图font_show(zn_font, "龙年行大运", (255, 0, 0))for particle in particles:particle.draw(screen) # 绘制烟花粒子pygame.display.flip() # 更新屏幕显示pygame.time.Clock().tick(60) # 控制帧率# explosion_sound.stop() # 停止音效# 显示新年倒数
def countdown():screen.fill((255, 0, 0)) # 清空屏幕font_show(zn_font, "跨年倒数", (255, 215, 0))pygame.display.flip() # 更新屏幕显示pygame.time.delay(1000) # 延迟1秒# font = pygame.font.Font(None, 100)font_path = os.path.join(os.path.dirname(__file__), 'font_ttf\\Antology.ttf')font = pygame.font.Font(font_path, 100)countdown_time = 3 # 倒数时间last_countdown_time = pygame.time.get_ticks()while countdown_time > 0:current_time = pygame.time.get_ticks()if current_time - last_countdown_time >= 1000:last_countdown_time = current_timecountdown_time -= 1screen.fill((255, 0, 0)) # 清空屏幕font_show(font, str(countdown_time), (255, 215, 0))pygame.display.flip() # 更新屏幕显示pygame.time.Clock().tick(60) # 控制帧率screen.fill((255, 0, 0)) # 清空屏幕font_show(zn_font, "积步千里祝大家", (255, 215, 0))pygame.display.flip() # 更新屏幕显示pygame.time.delay(1000) # 延迟1秒screen.fill((255, 0, 0)) # 清空屏幕font_show(zn_font, "新年快乐", (255, 215, 0))pygame.display.flip() # 更新屏幕显示pygame.time.delay(1000) # 延迟1秒# 主程序循环
running = True
auto_explode_interval = 2000 # 自动循环燃放的时间间隔(毫秒)
last_explode_time = pygame.time.get_ticks()countdown() # 显示新年倒数while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsecurrent_time = pygame.time.get_ticks()if current_time - last_explode_time >= auto_explode_interval:last_explode_time = current_timex_offset = screen_width // 2 - 240y_offset = screen_heightfor i in range(4):x_offset += (i * 80)y_offset = screen_height // (2 + i)explode(x_offset, y_offset, 2000)pygame.display.flip() # 更新屏幕显示pygame.time.Clock().tick(60) # 控制帧率# 退出pygame
pygame.quit()
六、总结
至此,本文内容已全部讲解完毕。祝愿大家在新的一年里龙腾虎跃,龙行天下,龙凤呈祥!
相关文章:
[python] 过年燃放烟花
目录 新年祝福语 一、作品展示 二、作品所用资源 三、代码与资源说明 四、代码库 五、完整代码 六、总结 新年祝福语 岁月总是悄然流转,让人感叹时间的飞逝,转眼间又快到了中国传统的新年(龙年)。 回首过去…...
数据结构与算法:图论(邻接表板子+BFS宽搜、DFS深搜+拓扑排序板子+最小生成树MST的Prim算法、Kruskal算法、Dijkstra算法)
前言 图的难点主要在于图的表达形式非常多,即数据结构实现的形式很多。算法本身不是很难理解。所以建议精通一种数据结构后遇到相关题写个转换数据结构的接口,再套自己的板子。 邻接表板子(图的定义和生成) public class Graph…...
Python之PySpark简单应用
文章目录 一、介绍1.准备工作2. 创建SparkSession对象:3. 读取数据:4. 数据处理与分析:5. 停止SparkSession: 二、示例1.读取解析csv数据2.解析计算序列数据map\flatmap 三、问题总结1.代码问题2.配置问题 一、介绍 PySpark是Apa…...
降维(Dimensionality Reduction)
一、动机一:数据压缩 这节我将开始谈论第二种类型的无监督学习问题,称为降维。有几个原因使我们可能想要做降维,其一是数据压缩,它不仅允许我们压缩数据使用较少的计算机内存或磁盘空间,而且它可以加快我们的学习算法。…...
web应用(网页)怎样调用浏览器插件(如metamask小狐狸钱包)
下边是与gpt的对话,代码可以在浏览器控制台验证 一,在网页上点击一个连接按钮 然后小狐狸钱包就打开了,是怎么实现的呢 当你在网页上点击一个连接按钮,然后自动打开MetaMask(通常被称为“小狐狸钱包”,一种…...
2024美赛数学建模C题完整论文教学(含十几个处理后数据表格及python代码)
大家好呀,从发布赛题一直到现在,总算完成了数学建模美赛本次C题目Momentum in Tennis完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 C论文共49页&…...
Matplotlib绘制炫酷柱状图的艺术与技巧【第60篇—python:Matplotlib绘制柱状图】
文章目录 Matplotlib绘制炫酷柱状图的艺术与技巧1. 簇状柱状图2. 堆积柱状图3. 横向柱状图4. 百分比柱状图5. 3D柱状图6. 堆积横向柱状图7. 多系列百分比柱状图8. 3D堆积柱状图9. 带有误差线的柱状图10. 分组百分比柱状图11. 水平堆积柱状图12. 多面板柱状图13. 自定义颜色和样…...
window 挂载linux 网盘
背景:因为很多情况下,作为开发人员,我们都希望用Linux的编译环境,但是可以用windows下各种IDE来写code; linux 服务器安装NFS服务 说明:NFS 服务就是让不同的计算机可以在不同的操作系统之间共享文件,采用的就是服务端/客户端的架构,在NFS服务器上将目录设置为输出目录(…...
windows10忘记密码的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
进程和线程的区别详解
🎥 个人主页:Dikz12📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 进程 进程在系统中是如何管理的 进一步认识PCB 线程 能否一直增加线程数目来提高效率 进程和线程…...
(基于xml配置Aop)学习Spring的第十五天
一 . Spring Aop编程简介 再详细点 , 如下 二 . 基于xml配置Aop 解决proxy相关问题 解决问题开始用xml配置AOP 导入pom坐标 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.6</vers…...
Centos7环境安装PHP8
一、安装必要的模块 yum install -y bzip2-devel libcurl-devel libxml2-devel sqlite-devel oniguruma oniguruma-devel libxml2 libxml2-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel zstd libzstd-devel curl libcurl-devel libpng libpng-devel …...
No matching client found for package name ‘com.unity3d.player‘
2024年2月5日更新 必须使用Unity方式接入Unity项目!一句话解决所有问题。(真的别玩Android方式) 大致这问题出现原因是我在Unity采用了Android方式接入Firebase,而Android接入实际上和Unity接入方式有配置上的不一样,我…...
JavaWeb之HTML-CSS --黑马笔记
什么是HTML ? 标记语言:由标签构成的语言。 注意:HTML标签都是预定义好的,HTML代码直接在浏览器中运行,HTML标签由浏览器解析。 什么是CSS ? 开发工具 VS Code --安装文档和安装包都在网盘中 链接:https://p…...
logback日志配置
springboot默认使用logback 无需额外添加pom依赖 1.指定日志文件路径 当前项目路径 testlog文件夹下 linux会在项目jar包同级目录 <property name"log.path" value"./testlog" /> 如果是下面这样配置的话 window会保存在当前项目所在盘的home文件夹…...
SpringBoot集成Flowable工作流
文章目录 一、了解Flowable1. 什么是Flowable2. Flowable基本流程3. Flowable主要几张表介绍 二、SpringBoot集成Flowable1. 在idea中安装Flowable插件2. SpringBoot集成Flowable3. SpringBoot集成Flowable前端页面 三、创建流程模版(以请假为例) 提示:以下是本篇文…...
try-with-resources 语法详解
目录 一、介绍 二、用法对比 三、优势 四、原理分析 一、介绍 在Java 7中,引入了一项重要的语法糖——try-with-resources,这项特性的目的是为了更有效地处理资源的管理。资源指的是需要在代码执行完毕后手动关闭的对象,比如文件流、网络…...
【Java程序设计】【C00207】基于(JavaWeb+SSM)的宠物领养管理系统(论文+PPT)
基于(JavaWebSSM)的宠物领养管理系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物领养系统 本系统分为前台系统、管理员、收养者和寄养者4个功能模块。 前台系统:游客打开系统…...
2024-2-4-复习作业
源代码: #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct Node {datatype data;struct Node *next;struct Node *prev; }*DoubleLinkList;DoubleLinkList create() {DoubleLinkList s(DoubleLinkList)malloc(sizeof(st…...
【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】
前言 大家好吖,欢迎来到 YY 滴Linux 系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
