[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()

六、总结 

至此,本文内容已全部讲解完毕。祝愿大家在新的一年里龙腾虎跃,龙行天下,龙凤呈祥! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/251793.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM - Qwen-72B LoRA 训练与推理实战

目录 一.引言 二.模型简介 1.Qwen-Model 总览 2.Qwen-Chat-72B - PreTrain - Tokenizer - Base Line - SFT / RLHF 3.Qwen-72 模型架构 - Config.json - c_attn/c_proj - Attention Forward - ROPE - Qwen MLP - Qwen Block 三.QLoRA 与 Infer 实战 1.SFT 指…

JavaScript鼠标拖放(Drag and Drop)

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 拖放是现代界面不可或缺的交互方式之一。本文将介绍如何用JavaScript…

【蓝桥杯冲冲冲】 [SCOI2005] 骑士精神

蓝桥杯备赛 | 洛谷做题打卡day28 文章目录 蓝桥杯备赛 | 洛谷做题打卡day28[SCOI2005] 骑士精神题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示题解代码我的一些话[SCOI2005] 骑士精神 题目描述 输入格式 第一行有一个正整数 T T T( T ≤ 10

随机森林超参数的网格优化(机器学习的精华--调参)

随机森林超参数的网格优化(机器学习的精华–调参) 随机森林各个参数对算法的影响 影响力参数⭐⭐⭐⭐⭐几乎总是具有巨大影响力n_estimators(整体学习能力)max_depth(粗剪枝)max_features(随机…

系统架构设计师考试大纲2023

一、 考试方式(机考) 考试采取科目连考、 分批次考试的方式, 连考的第一个科目作答结束交卷完成后自动进 入第二个科目, 第一个科目节余的时长可为第二个科目使用。 高级资格: 综合知识科目考试时长 150 分钟&#xff…

使用goland IDE编写go windows ui

最近突发奇想,想实现一款工作节奏的提示安排小闹钟。那首先解决的就是UI。本人擅长go语言。那go在windows ui的探索肯定有人做过了吧。一查还真有,通过知乎,csdn等查到目前支持最好的就是walk库了。那走起试试。 一、拷贝go代码 将官网例子…

idea中找到所有的TODO

idea中找到所有的TODO (1)快捷键 Alt6 (2)View -> Tool Windows -> TODO

kafka客户端生产者消费者kafka可视化工具(可生产和消费消息)

点击下载《kafka客户端生产者消费者kafka可视化工具(可生产和消费消息)》 1. 前言 因在工作中经常有用到kafka做消息的收发,每次调试过程中,经常需要查看接收的消息内容以及人为发送消息,从网上搜寻了一下&#xff0…

css1基础选择器

大纲 一.标签选择器 比较简单,前面直接写目标标签 二.类选择器 应用 例子 三.多类名选择器(调用时中间用空格隔开) 四.id选择器 应用 五.通配符选择器 应用 六.总结

OpenResty 安装

安装OpenResty 1.安装 首先你的Linux虚拟机必须联网 1)安装开发库 首先要安装OpenResty的依赖开发库,执行命令: yum install -y pcre-devel openssl-devel gcc --skip-broken2)安装OpenResty仓库 你可以在你的 CentOS 系统中…

VUE开发记录

1、VUE模板传递参数到JS方法 <select-language :value"item.language" change"selectLanguage($event, key)"></select-language>selectLanguage(value, key){console.log(value, key) }, 2、Element框架el-form-item自定义label和内容 <…

2024 年 5 款适用于免费 iPhone 数据恢复的工具软件

搜索一下&#xff0c;你会发现许多付费或免费的iPhone数据恢复工具声称它们可以帮助你以很高的成功率找回所有丢失的数据。然而&#xff0c;这正是问题所在。真的很难做出选择。为了进一步帮助您解决数据丢失问题&#xff0c;我们在此列出了 5 款最好的免费 iPhone 恢复软件供您…

JS第二天、原型、原型链、正则

☆☆☆☆ 什么是原型&#xff1f; 构造函数的prototype 就是原型 专门保存所有子对象共有属性和方法的对象一个对象的原型就是它的构造函数的prototype属性的值。prototype是哪来的&#xff1f;所有的函数都有一个prototype属性当函数被创建的时候&#xff0c;prototype属性…

Palworld幻兽帕鲁自建服务器32人联机开黑!

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…

视频播放器nPlayer

nPlayer是一款功能强大的媒体播放器&#xff0c;适用于各种操作系统&#xff0c;包括iOS、Android、Windows和Mac等。它支持多种音频和视频格式&#xff0c;包括MP4、AVI、FLV、MKV等&#xff0c;并提供了高质量的音视频播放和流畅的播放速度。 nPlayer具有多种功能和特点&…

基于PSO-BP神经网络的风电功率MATLAB预测程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 参考文献 基于风电场运行特性的风电功率预测及应用分析——倪巡天 资源简介 由于自然风具有一定的随机性、不确定性与波动性&#xff0c;这将会使风电场的功率预测受到一定程度的影响&#xff0c;它们之间…

【Linux】EXT2文件系统 | 磁盘分区块组 | inode

文章目录 一、前言二、EXT2文件系统 - 逻辑存储结构&#x1f4be;分区&#xff08;Partition&#xff09;分区的概念每个分区的内容Linux下查询磁盘分区 &#x1f4be;块组&#xff08;Block Group&#xff09;磁盘格式化每个块组的内容1. Superblock&#xff08;超级块&#x…

Log360,引入全新安全与风险管理功能,助力企业积极抵御网络威胁

ManageEngine在其SIEM解决方案中推出了安全与风险管理新功能&#xff0c;企业现在能够更主动地减轻内部攻击和防范入侵。 SIEM 这项新功能为Log360引入了安全与风险管理仪表板&#xff0c;Log360是ManageEngine的统一安全信息与事件管理&#xff08;SIEM&#xff09;解决方案…

算法学习——华为机考题库2(HJ11 - HJ20)

算法学习——华为机考题库2&#xff08;HJ11 - HJ20&#xff09; HJ11 数字颠倒 描述 输入一个整数&#xff0c;将这个整数以字符串的形式逆序输出 程序不考虑负数的情况&#xff0c;若数字含有0&#xff0c;则逆序形式也含有0&#xff0c;如输入为100&#xff0c;则输出为0…