Python生日祝福烟花

news2025/1/9 0:23:24

1. 实现效果

在这里插入图片描述

2. 素材加载

2个图片和3个音频
shoot(已去底).jpg

flower.jpg

shoot_image = pygame.image.load('shoot(已去底).jpg') # 加载拼接的发射图像
flower_image = pygame.image.load('flower.jpg')      # 加载拼接的烟花图 烟花不好去底
# 调整图像的像素为原图的1/2 因为图像相对于界面来说有些大
shoot_image = pygame.transform.scale(shoot_image, (shoot_image.get_size()[0]/2 ,shoot_image.get_size()[1]/2))
flower_image = pygame.transform.scale(flower_image, (flower_image.get_size()[0]/2 ,flower_image.get_size()[1]/2))
# 音频、音效
shoot_sound = pygame.mixer.Sound('shoot.mp3')
bomb_sound = pygame.mixer.Sound('bomb1.mp3')
bg_music = pygame.mixer.Sound('bg.mp3')

图像分块显示

# 每个部分的宽度
num_parts = 10  # 有10个shoot图
num_parts1 = 13 # 13个烟花
shoot_part_width = shoot_width // num_parts
flower_part_width = flower_width // num_parts1

在这里插入图片描述

3. 烟花发射

发射shoot图从底部往上,快到顶部变烟花flower,然后下落一段距离,最后消失。

在这里插入图片描述

4. 画面定格

处理鼠标点击事件以暂停和恢复动画
在这里插入图片描述

5. 完整代码

# 2024-12-01 Python简单的生日祝福烟花
import pygame # pip install pygame
import random
pygame.init()               # 初始化 pygame
WIDTH, HEIGHT = 750, 500    # 设置窗口尺寸
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("生日烟花祝福") # 窗口标题
#bg_image = pygame.image.load('bg.jpg')
shoot_image = pygame.image.load('shoot(已去底).jpg') # 加载拼接的发射图像
flower_image = pygame.image.load('flower.jpg')      # 加载拼接的烟花图 烟花不好去底
# 调整图像的像素为原图的1/2 因为图像相对于界面来说有些大
shoot_image = pygame.transform.scale(shoot_image, (shoot_image.get_size()[0]/2 ,shoot_image.get_size()[1]/2))
flower_image = pygame.transform.scale(flower_image, (flower_image.get_size()[0]/2 ,flower_image.get_size()[1]/2))
# 音频、音效
shoot_sound = pygame.mixer.Sound('shoot.mp3')
bomb_sound = pygame.mixer.Sound('bomb1.mp3')
bg_music = pygame.mixer.Sound('bg.mp3')
bg_music.play(-1) # 播放背景音乐
# 获取图像的宽度和高度
shoot_width, shoot_height = shoot_image.get_size()
flower_width, flower_height = flower_image.get_size()
# 每个部分的宽度
num_parts = 10  # 有10个shoot图
num_parts1 = 13 # 13个烟花
shoot_part_width = shoot_width // num_parts
flower_part_width = flower_width // num_parts1
class Firework: # 定义烟花类
    def __init__(self, x):
        self.x = x              # 使用提供的x坐标
        self.shoot_y = HEIGHT   # shoot初始y坐标在底部
        self.flower_y = 0       # flower初始位置上方
        self.shoot_active = True
        self.flower_active = False
        self.shoot_part_index = random.randint(0, num_parts - 1)    # 随机选择shoot的部分索引
        self.flower_part_index = random.randint(0, num_parts - 1)   # 随机选择flower的部分索引
        self.drop_height = 10                                       # 下落的高度(在达到顶部后下落一点)
        self.is_dropping = False                                    # 是否开始下落
        self.alpha = 255                                            # 透明度控制
    def shoot(self):
        if self.shoot_active:
            # 绘制随机选择的 shoot 图像部分
            screen.blit(shoot_image, (self.x, self.shoot_y),(self.shoot_part_index * shoot_part_width, 0, shoot_part_width, shoot_height))
            self.shoot_y -= 5  # 更新 shoot 的位置 向上移动
            if self.shoot_y >= shoot_height:
                shoot_sound.play() # 播放发射音效
            if self.shoot_y <= 20:  # 当 shoot 达到接近窗口顶部时,触发下落
                self.shoot_active = False
                self.flower_active = True
                self.flower_y = self.shoot_y + self.drop_height  # flower 下落一点
                self.is_dropping = True  # 标记为开始下落
        if self.flower_active:   # 绘制随机选择的 flower 图像部分
            bomb_sound.play()
            flower_surface = pygame.Surface((flower_part_width, flower_height), pygame.SRCALPHA)  # 创建带透明度的 surface
            flower_surface.blit(flower_image, (0, 0),(self.flower_part_index * flower_part_width, 0, flower_part_width, flower_height))
            flower_surface.set_alpha(self.alpha) # 设置透明度
            screen.blit(flower_surface, (self.x, self.flower_y))
            if self.is_dropping:
                self.flower_y += 1  # flower 向下移动
            if self.alpha > 0:
                self.alpha -= 5  # 逐步降低透明度
            else:
                self.flower_active = False  # 透明度为0时消失
clock = pygame.time.Clock()
fireworks = []
running = True
paused = False  # 初始化暂停状态为 False
font = pygame.font.Font(None, 74)   # 设置字体, 使用默认字体, 大小为74
text_color = (255, 192, 203)        # 文字颜色粉红色
birthday_text = font.render("Happy Birthday", True, text_color)        # 文本"生日快乐"
text_rect = birthday_text.get_rect(center=(WIDTH // 2, HEIGHT - 150))  # 文本位置
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # 处理鼠标点击事件以暂停和恢复动画
        if event.type == pygame.MOUSEBUTTONDOWN:
            paused = not paused  # 切换暂停状态
    if not paused:
        # 每隔一段时间生成新烟花
        if random.random() < 0.01:  # 随机生成烟花 and len(fireworks) < 10
            # 随机选择 X 坐标,避免与已有烟花重叠
            new_firework_x = random.randint(0, WIDTH - shoot_part_width)
            overlap = any(abs(new_firework_x - firework.x) < shoot_part_width for firework in fireworks)
            if not overlap:     # 如果没有重叠,添加新烟花
                fireworks.append(Firework(new_firework_x))
        screen.fill((0, 0, 0))  # 填充黑色背景 #screen.blit(bg_image, (0, 0))
        for firework in fireworks:
            firework.shoot()
        screen.blit(birthday_text, text_rect) # 绘制生日文本
        pygame.display.flip()
        clock.tick(60) # 控制更新画面的速度
pygame.quit()

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

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

相关文章

智能手机租赁系统全新模式改变消费习惯与商家盈利路径

内容概要 智能手机租赁系统的崛起&#xff0c;让我们瞄到了一个消费市场的新风向标。想象一下&#xff0c;传统上人们总是为了最新款手机奋不顾身地排队、借钱甚至是透支信用卡。现在&#xff0c;通过灵活的租赁选项&#xff0c;消费者可以更加随意地体验高科技产品&#xff0…

【简博士统计学习方法】第1章:3. 统计学习方法的三要素

3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间&#xff08;Hypothesis Space&#xff09;&#xff1a;所有可能的条件概率分布或决策函数&#xff0c;用 F \mathcal{F} F表示。 若定义为决策函数的集合&#xff1a; F { f ∣ Y f ( X ) } \mathcal{F…

牛客网刷题 ——C语言初阶(2分支和循环-for)——打印菱形

1. 题目描述 用C语言在屏幕上输出以下图案&#xff1a; 2. 思路 我是先上手&#xff0c;先把上半部分打印出来&#xff0c;然后慢慢再来分析&#xff0c;下面这是我先把整个上半部分打印出来&#xff0c;因为空格不方便看是几个&#xff0c;这里先用&代替空格了 然后这里…

STM32——系统滴答定时器(SysTick寄存器详解)

文章目录 1.SysTick简介2.工作原理3.SysTick寄存器4.代码延时逻辑5.附上整体代码6.一些重要解释 1.SysTick简介 Cortex-M处理器内集成了一个小型的名为SysTick(系统节拍)的定时器,它属于NVIC的一部分,且可以产生 SysTick异常(异常类型#15)。SysTick为简单的向下计数的24位计数…

《Opencv》信用卡信息识别项目

目录 一、项目介绍 二、数据材料介绍 1、模板图片&#xff08;1张&#xff09; 2、需要处理的信用卡图片&#xff08;5张&#xff09; 三、实现过程 1、导入需要用到的库 2、设置命令行参数 3、模板图像中数字的定位处理 4、信用卡图像处理 5、模板匹配 四、总结 一…

密码学科普

1 信息传输中的安全隐患 1. 窃听 解决方案&#xff1a;明文加密&#xff0c;X只能窃听到密文 2. 假冒 解决方案&#xff1a;消息认证码或者数字签名 3. 篡改 解决方案&#xff1a;消息认证码或者数字签名 4. 事后否认 解决方案&#xff1a;数字签名 2 对称加密/非对称加密 1…

复合机器人助力手机壳cnc加工向自动化升级

在当今竞争激烈的制造业领域&#xff0c;如何提高生产效率、降低成本、提升产品质量&#xff0c;成为众多企业面临的关键挑战。尤其是在手机壳 CNC 加工这一细分行业&#xff0c;随着市场需求的持续增长&#xff0c;对生产效能的要求愈发严苛。而复合机器人的出现&#xff0c;正…

爬虫学习记录

1.概念 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 通用爬虫:抓取的是一整张页面数据聚焦爬虫:抓取的是页面中的特定局部内容增量式爬虫:监测网站中数据更新的情况,只会抓取网站中最新更新出来的数据 robots.txt协议: 君子协议,网站后面添加robotx.txt…

黑马头条平台管理实战

黑马头条 08平台管理 1.开始准备和开发思路1.1.开发网关1.2编写admin-gateway 代码 2.开发登录微服务2.1编写登录微服务 3.频道管理4.敏感词管理5.用户认证审核6.自媒体文章人工审核99. 最后开发中碰到的问题汇总1.关于nacos 配置 问题2.在开发频道管理新增频道后端无法接收到前…

实验四 数组和函数

实验名称 实验四 数组和函数 实验目的 &#xff08;1&#xff09;掌握一维、二维数组以及字符数组的定义、元素引用和编程方法。 &#xff08;2&#xff09;掌握字符串常用程序的设计方法。 &#xff08;3&#xff09;掌握函数定义和调用的方法&#xff0c;以及函数参数传…

Idea(中文版) 项目结构/基本设置/设计背景

目录 1. Idea 项目结构 1.1 新建项目 1.2 新建项目的模块 1.3 新建项目模块的包 1.4 新建项目模块包的类 2. 基本设置 2.1 设置主题 2.2 设置字体 2.3 设置注释 2.4 自动导包 2.5 忽略大小写 2.6 设置背景图片 3. 项目与模块操作 3.1 修改类名 3.2 关闭项目 1. I…

Android Audio基础(53)——PCM逻辑设备Write数据

1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在 ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图。: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间数据不能随便…

Android Audio基础(54)——数字音频接口 I2S、PCM(TDM) 、PDM

1. 概述 本文介绍的数字音频接口全部是硬件接口,是实际的物理连线方式,即同一个PCB板上IC芯片和IC芯片之间的通讯协议。 PCM、PDM也可以用于表示音频编码格式,。编码格式是指模拟信号数字化的方式。 I2S和PCM(TDM)接口传输的数据是PCM格式的音频数据。这两种协议是最为常见…

HDFS架构原理

一、HDFS架构整体概述 HDFS是Hadoop Distribute File System 的简称&#xff0c;意为&#xff1a;Hadoop分布式文件系统。HDFS是Hadoop核心组件之一&#xff0c;作为大数据生态圈最底层的分布式存储服务而存在。HDFS解决的问题就是大数据如何存储,它是横跨在多台计算机上的文件…

windows11(或centos7)安装nvidia显卡驱动、CUDA、cuDNN

本文是我瞎搞时写的问题汇总及参考文献&#xff0c;记录了一些问题解决的进度及对问题的思考。 最近一次更新时间&#xff1a;2025年1月4日 一、安装或更新nvidia显卡驱动 首先&#xff0c;需要确保你的设备安装了最新的显卡驱动。 &#xff08;1&#xff09;centos7安装显…

2025-01-04 Unity插件 YodaSheet2 —— 基础用法

文章目录 环境配置1 创建 YadeSheetData2 读取方式2.1 表格读取2.2 列表读取 3 自定义设置3.1 修改代码生成位置3.2 添加列表支持3.2.1 修改 DataTypeMapper.cs3.2.2 修改 SheetDataExtensions.cs3.2.3 修改 CodeGeneratorEditor.cs3.2.4 测试 ​ 官方文档&#xff1a; Unity …

STM32 拓展 RTC(实时时钟)

RTC简介 RTC(Real Time Clock,实时时钟)。是一个掉电后仍然可以继续运行的独立定时器。 RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。 RTC实质…

微信小程序实现登录注册

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…

[大模型开源]SecGPT 网络安全大模型

模型介绍 SecGPT的愿景是将人工智能技术引入网络安全领域&#xff0c;以提高网络防御的效率和效果。其使命是推动网络安全智能化&#xff0c;为社会提供更安全的数字生活环境。 ① SecGPT开源地址&#xff1a;https://github.com/Clouditera/secgpt② 模型地址&#xff1a;htt…

解决“KEIL5软件模拟仿真无法打印浮点数”之问题

在没有外部硬件支持时&#xff0c;我们会使用KEIL5软件模拟仿真&#xff0c;这是是仿真必须要掌握的技巧。 1、点击“Project”&#xff0c;然后点击“Options for target 项目名字”&#xff0c;点击“Device”,选择CPU型号。 2、点击“OK” 3、点击“Target”,勾选“Use Mi…