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

六、总结 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AUTOSAR内存篇 -EEPROM Abstraction(EA)

文章目录 功能介绍一般行为寻址机制和分段地址计算擦/写次数限制“立即” 数据的处理管理块一致性信息总结本文介绍关于EEPROM Abstraction相关的内容。下图所示为内存硬件抽象层的模块架构图。 EEPROM抽象(EA)从器件特定的寻址方案和分段中抽象出来,并为上层提供虚拟寻址方…

C++进阶--搜索二叉树

概念 搜索二叉树是一种特殊的二叉树,其具有以下特点: 1.对于每个结点,它的左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。 2.左子树和右子树都是搜索二叉树。 这个 特性使得搜索二叉树可…

PyTorch的10个基本张量操作

PyTorch是一个基于python的科学计算包。它的灵活性允许轻松集成新的数据类型和算法,并且框架也是高效和可扩展的,下面我们将介绍一些Pytorch的基本张量操作。 Tensors 张量Tensors是一个向量,矩阵或任何n维数组。这是深度学习的基本数据结构…

C语言贪吃蛇详解

个人简介:双非大二学生 个人博客:Monodye 今日鸡汤:人生就像一盒巧克力,你永远不知道下一块是什么味的 C语言基础刷题:牛客网在线编程_语法篇_基础语法 (nowcoder.com) 一.贪吃蛇游戏背景 贪吃蛇是久负盛名的游戏&…

图解报文网关:一种低代码报文网关的创新设计

所有的支付系统都对接了很多的外部支付、流出、外汇等各种类型的渠道,这些渠道的接口和报文格式各异。今天和大家一起聊聊如何实现一种简洁高效的低代码报文网关设计,主要包括:报文网关的定位,三种形态,低代码报文网关…

ClickHouse时区

clickhouse数据库的时间是UTC时间。服务器默认的是上海时间。 sudo vim /etc/clickhouse-server/config.xml clickhouse默认的时区是注释的就是UTC时间 %F 表示日期,格式为 YYYY-MM-DD。%T 表示时间,格式为 HH:MM:SS。 因此,formatDateT…

uniapp设置不显示顶部返回按钮

一、pages文件中,在相应的页面中设置 "titleNView": {"autoBackButton": false} 二、对应的页面文件设置隐藏元素 document.querySelector(.uni-page-head-hd).style.display none

leetcode(滑动窗口)3.无重复字符的最长字串(C++详细题解)DAY2

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示…

开发大佬为什么都不喜欢关电脑?

引言 在平时工作中,咱们程序员这一群体往往展现出一些特有的行为习惯,其中之一便是不喜欢频繁地关闭电脑、拒绝关机、长久待机、特别是苹果的机器。 下面从技术分析与用户行为研究的角度出发,将深入探讨程序员倾向于保持电脑开机状态的原因…

Git的一些基本操作

初始git 我们给出下面的一个场景,在大学里,一些老师在我们做完实验之后喜欢让我们交实验报告,假设我们有一个比较追求完美的老师和一个勤奋的学生,这个学生叫做小帅,那天小帅桑勤奋的完成实验报告,在第二天…

关于函数接口的认识和学习

1.复习拷贝文件的流程: a.打开文件:fopen b.文件的读写:fgetc/fputc/fgets/fputs c.关闭文件:fclose 注意:全缓存的缓存区大小为4k,所以定义了一个4096字节的char数组。打开两个目标文件和源文件&#xff0…

大厂设计师亲授:PS 中文设置技巧

Photoshop是Adobe开发的图像处理软件,也是市场上最受欢迎的图像处理软件之一。然而,对于一些不熟悉英语的用户来说,Photoshop的默认语言设置可能会成为使用的障碍。那么,如何将Photoshop设置为中文呢?以下是多个角度的…

day21 图像标签、链接标签

文章目录 图像标签链接标签1.文本超链接2.图像超链接3.页面间链接4.锚链接5.功能性链接 图像标签 常见的图像格式 JPGGIFPNGBMP… <img src"path" alt"text" title"text" width"x" height"y"/>src【必填】&#xff…

前端使用pdf.js进行pdf文件预览的第二种方式:Viewer.html

背景 最近需要实现一个PDF文档预览的功能&#xff0c;按理说&#xff0c;如果只是简单的预览&#xff0c;使用<embed>、<object>等就可以实现。 但是&#xff0c;我们的需求要实现搜索&#xff01;而且&#xff0c;文档还都超大&#xff0c;均300页以上。那<e…

###C语言程序设计-----C语言学习(9)#函数基础

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 一. 基础知识的学习 1.函数的定义 函数是一个完成特定工作的独立程序模块&…

Stable Diffusion 模型下载:国风3 GuoFeng3

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十推荐提示词下载地址模型介绍 欢迎使用GuoFeng3模型 - 这是一个中国华丽古风风格模型,也可以说是一个古风游戏角色模型,具有2.5D的质感。 条目内

Tauri:相比Electron,还有很长路要走的。

一、Tauri是什么 Tauri是一个开源的框架&#xff0c;用于构建跨平台的桌面应用程序。它允许开发者使用Web技术&#xff08;如HTML、CSS和JavaScript&#xff09;来构建高性能的本地应用程序&#xff0c;同时提供了访问底层操作系统功能的能力。 Tauri的设计目标是提供一种简单…

js改善轮播图(transform)时内部文本上下闪动问题

前些天绘制轮播图时&#xff0c;发现轮播图中不同span标签内&#xff08;样式不同&#xff09;文字上下跳动。 为了防止眩晕在岗位上&#xff0c;需要对其进行改善&#xff0c;试了很多种方法&#xff0c;最后来总结一下&#xff1a; 我的轮播图template代码片段&#xff1a; …

DBeaver连接人大金仓数据库

人大金仓的驱动 1. 打开DBeaver软件&#xff0c;点击“数据库”&#xff0c;选择“驱动管理器” 2. 点击“新建”进行达人大金仓驱动管理器配置。 3、创建驱动-设置&#xff1a;驱动名称、类名、url 驱动名称&#xff1a;人大金仓&#xff1b; 类名&#xff1a;com.kingbas…

2024美赛数学建模A题思路分析 - 资源可用性和性别比例(2)

# 1 赛题 问题A&#xff1a;资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…