[python] 过年燃放烟花

news2024/11/25 14:51:05

目录

新年祝福语

一、作品展示 

二、作品所用资源 

三、代码与资源说明 

四、代码库

五、完整代码 

六、总结 


新年祝福语

岁月总是悄然流转,让人感叹时间的飞逝,转眼间又快到了中国传统的新年(龙年)。

回首过去,我们经历了许多挑战,也收获了成长。展望未来,我们充满期待。

在这特别的时刻,我想对所有粉丝送上真挚祝福。愿新年带给你们无尽的快乐与幸福,健康与平安。

感谢你们的支持,新的一年我将继续努力创造更多精彩。

祝大家新年快乐!


一、作品展示 

以下是我用 [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 = color
        self.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.1
        self.x = x
        self.y = y

    def update(self):
        self.x += self.dx
        self.y += self.dy
        self.dy += self.gravity

    def 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_time
            countdown_time -= 1

        screen.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 = False

    current_time = pygame.time.get_ticks()
    if current_time - last_explode_time >= auto_explode_interval:
        last_explode_time = current_time
        x_offset = screen_width // 2 - 240
        y_offset = screen_height
        for 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.coloradmin.cn/o/1433707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMWare下载安装(包含Window是和Mac)

VMWare下载安装(包含Window是和Mac) 文章目录 VMWare下载安装(包含Window是和Mac)一、windows下载VMWare①:下载01:网盘下载02:官方下载 ②:安装③:密钥 二、Mac下载VMWa…

2.3作业

作业要求&#xff1a; 程序代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h> typedef struct node //定义链表节点结构体&#xff1a;数据域、指针域 {int data;struct node *next; }*linklist;linklist create_node()//创建新节…

【解刊】顶级IEEE(trans),一审极快!对国人审稿友好,大咖教授投稿之选

计算机类 • 高分快刊 今天带来IEEE旗下计算机领域高分快刊&#xff0c;审稿速度快&#xff0c;期刊质量高&#xff0c;审稿过程友好。如有投稿意向可重点关注&#xff1a; 01 期刊简介 IEEE Transactions on Network Science and Engineering ✅出版社&#xff1a;IEEE ✅I…

缓存组件Caffeine的使用

caffeine是一个高性能的缓存组件&#xff0c;在需要缓存数据&#xff0c;但数据量不算太大&#xff0c;不想引入redis的时候&#xff0c;caffeine就是一个不错的选择。可以把caffeine理解为一个简单的redis。 1、导入依赖 <!-- https://mvnrepository.com/artifact/com.git…

力扣题目训练(7)

2024年1月31日力扣题目训练 2024年1月31日力扣题目训练387. 字符串中的第一个唯一字符389. 找不同401. 二进制手表109. 有序链表转换二叉搜索树114. 二叉树展开为链表52. N 皇后 II 2024年1月31日力扣题目训练 2024年1月31日第七天编程训练&#xff0c;今天主要是进行一些题训…

小型内衣洗衣机什么牌子好?家用小型洗衣机推荐

内衣裤作为我们日常必备的贴身衣物&#xff0c;所以对卫生方面的要求也比较高&#xff0c;但对许多人们而言&#xff0c;对内衣裤进行清洗是一项相当繁琐的事情&#xff0c;主要是因为并不能直接把内衣裤放入大型洗衣机里和其它衣服混合洗&#xff0c;所以大多数用户都会自己动…

2024美赛数学建模C题完整论文教学(含十几个处理后数据表格及python代码)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了数学建模美赛本次C题目Momentum in Tennis完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 C论文共49页&…

程序员想告赢开发商一户一表违约(终审判决)——铁拳迟到会打到每一个人...

二审的结果并没有出乎我的意料&#xff1a;维持原判。所以是我输了这场官司。 只是我输得非常不服气。 在二审中&#xff0c;我变换思路&#xff0c;以以下思路进行辩论&#xff1a; 1. 从“正式供电”方向&#xff0c;使用国家国标和法律法规证明小区目前非正式用电&#xff0…

三维模型的面数、段数、曲面必须进行精简优化?使用什么技术或手段实现最优解呢?

大师重建设置里面可以选择是否对三角网进行简化。数据简化介绍&#xff1a;针对弱纹理区域的三角网&#xff0c;简化面的智能识别处理。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c;POS信息…

关于服务器解析A记录和CNAME记录的分析

内容提要: 大致讲下理解,dns域名解析这一块 0 . 问题来源 最近搞了一个七牛云上传,然后需要配置融合cdn加速,也就是可以加速域名,中间有一部需要CNAME 域名,也就是将七牛云提供的域名CNAME一下,查阅资料其实就是起一个别名,好访问而已. 方便我们访问云存储,达到加速的效果. …

ONLYOFFICE 文档 8.0 现已发布:PDF 表单、RTL、单变量求解、图表向导、插件界面设计等更新

我们最新版本的在线编辑器现已推出&#xff0c;为整个套件优化了多项功能。阅读下文&#xff0c;了解详细更新内容。 什么是 ONLYOFFICE 文档 ONLYOFFICE 文档是一款开源的办公套件&#xff0c;由总部位于拉脱维亚的Ascensio System SIA开发。它支持处理文本文档、电子表格、演…

1216 - 数塔问题

题目 有如下所示的数塔&#xff0c;要求从底层走到顶层&#xff0c;若每一步只能走到相邻的结点&#xff0c;则经过的结点的数字之和最大是多少&#xff1f; 输入 输入数据首先包括一个整数整数 N (1≤N≤100)&#xff0c;表示数塔的高度&#xff0c;接下来用 N 行数字表示数…

力扣热门100题刷题笔记 - 5.最长回文子串

力扣热门100题 - 5.最长回文子串 题目链接&#xff1a;5. 最长回文子串 题目描述&#xff1a; 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。示例&#xff1a; 输入&#xff1a;s "…

FFMPEG推流到B站直播

0、参考 ffmpeg安装参考小弟另外的一个博客&#xff1a;FFmpeg和rtsp服务器搭建视频直播流服务-CSDN博客推流参考&#xff1a;用ffmpeg 做24小时推流直播_哔哩哔哩_bilibili 一、获取b站直播码 点击开始直播后&#xff0c;会出现以下的画面 二、ffmpeg进行直播推流 ffmpeg -r…

python常用pandas函数nlargest / nsmallest及其手动实现

目录 pandas库 Series和DataFrame nlargest和nsmallest 用法示例 代替方法 手动实现 模拟代码 pandas库 是Python中一个非常强大的数据处理库&#xff0c;提供了高效的数据分析方法和数据结构。它特别适用于处理具有关系型数据或带标签数据的情况&#xff0c;同时在时间…

速过计算机二级python——第六讲:文件操作

第六讲:文件操作 文件夹创建文件夹移动文件夹复制文件夹删除文件夹文件操作文件读取文件写入文件文件夹 创建文件夹 定义创建文件夹函数:chmk_path()定义一个函数 chmk_path(),这个函数的功能是创建文件夹。 首先需要导入操作系统接口模块——os 模块,这个模块中包含某些函…

Linux校准时间 Centos

Linux校准时间 Centos 首先&#xff0c;确保系统中已经安装了tzdata包。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo yum install tzdata设置系统时区为上海&#xff1a; sudo timedatectl set-timezone Asia/Shanghai验证时区设置是否生效&#xff1a;…

STM32F407 CAN参数配置 250Kbps

本篇CAN参数适用 芯片型号&#xff1a;STM32F407xx系统时钟&#xff1a;168MHz&#xff0c;CAN挂载总线APB1为42M波 特 率 &#xff1a;250Kpbs引脚使用&#xff1a;TX_PB9&#xff0c;RX_PB8&#xff1b;修改为PA11PA12后&#xff0c;参数不变。 步骤一、打勾开启CAN&#xf…

视频业务像素、带宽、存储空间计算

一、像素和分辨率 分辨率的单位通常是像素&#xff08;或点&#xff09;&#xff0c;用水平像素数乘以垂直像素数来表示。例如&#xff0c;一个分辨率为1920 x 1080的屏幕有1920个水平像素和1080个垂直像素。 总像素分辨率公式运算 例如 1920 x 10802073600总约200万 500W≈…

Rocky8+MHA搭建

文章目录 1、MHA 是什么1.1、MHA概念1.2、MHA 组成1.3、MHA特点 2、MHA架构2.1、MHA架构设计2.2、MHA准备工作2.3、服务器基础配置2.3.1、hosts配置2.3.2、修改主机名2.3.3、配置防火墙2.3.4、更新所有服务器2.3.5、所有服务器相互授权 3、mysql8安装3.1、卸载旧mysql3.2、安装…