社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用 Python 写个烟花秀!

Python见习室 • 2 周前 • 35 次点击  

👉 欢迎加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《Spring AI 项目实战》正在更新中..., 基于 Spring AI + Spring Boot 3.x + JDK 21;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍演示地址: http://116.62.199.48:7070/
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2期已完结,演示链接:http://116.62.199.48/;
  • 专栏阅读地址:https://www.quanxiaoha.com/column

截止目前,累计输出 90w+ 字,讲解图 3713+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,解锁全部项目,已有3300+小伙伴加入

图片

每逢节日很多地方都会燃放烟花来增添节日的气氛,然而因环境污染的加剧,近年来不少地方已经禁止燃放烟花了,为了弥补这个遗憾,本文我们来看一下如何使用 Python 来实现一场烟花秀。

这个例子比较简单,先来看一下效果图:

第1步:模块导入

import pygame, math, time, random, osfrom sys import exit

第2步:定义相关初始

win(窗口的w=宽,h=高)

WIN_W = 2200WIN_H = 1300

定义时间、显示、频率

t1 = 0.18 #时间流速show_n = 0show_frequency = 0.0015 #烟花绽放频率,数值越大频率越高

烟花颜色列表,下面随机抽出

color_list = [                [255, 50, 50],                [50, 255, 50],                [50, 50, 255],                [255, 255, 50],                [255, 50, 255],                [50, 255, 255],                [255, 255, 255]             ]

初始化pygame和音乐mixer

pygame.init()pygame.mixer.init()

创建一个窗口,pygame.RESIZABLE窗口大小可调节和标题

screen = pygame.display.set_mode((WIN_W, WIN_H),pygame.RESIZABLE, 32)pygame.display.set_caption("五彩烟花大放送")

背景音乐,可自定义

sound_wav = pygame.mixer.music.load("123.mp3")pygame.mixer.music.play()

Fireworks=烟花,定义主类

class Fireworks():    is_show = False    x, y = 00    vy = 0    p_list = []    color = [000]    v = 0
    def __init__(self, x, y, vy, n=300, color=[02550], v=10):        self.x = x        self.y = y        self.vy = vy        self.color = color        self.v = v        for i in range(n):            self.p_list.append([random.random() * 2 * math.pi, 0, v * math.pow(random.random(), 1 / 3)])
    def again(self):        self.is_show = True        self.x = random.randint(WIN_W // 2 - 350, WIN_W // 2 + 350)        self.y = random.randint(int(WIN_H / 2), int(WIN_H * 3 / 5))        self.vy = -40 * (random.random() * 0.4 + 0.8) - self.vy * 0.2        self .color = color_list[random.randint(0, len(color_list) - 1)].copy()        n = len(self.p_list)        self.p_list = []        for i in range(n):            self.p_list.append([random.random() * 2 * math.pi, 0self.v * math.pow(random.random(), 1 / 3)])
    def run(self):        global show_n        for p in self.p_list:            p[1] = p[1] + (random.random() * 0.6 + 0.7) * p[2]            p[2] = p[2] * 0.97            if p[2] 1.2:                self.color[0] *= 0.9999                self.color[1] *= 0.9999                self.color[2] *= 0.9999
            if max(self.color) 10 or self.y>WIN_H+p[1]:                show_n -= 1                self.is_show = False                break        self.vy += 10 * t1        self.y += self.vy * t1

烟花列表

fk_list = []fk_list.append(Fireworks(300300-20, n=100, color=[02550], v=10))fk_list.append(Fireworks(300300-20, n=200, color=[00255], v=11))fk_list.append(Fireworks(300300-20, n=200, color=[00255], v=12))fk_list.append(Fireworks(300300-20, n=500, color=[00255], v=12))fk_list.append(Fireworks(300300-20, n=600, color=[00255], v=13))fk_list.append(Fireworks(300300-20, n=700, color=[25500], v=15))fk_list.append(Fireworks(300300-20, n=800, color=[2552550], v=18))
clock = pygame.time.Clock()

烟花放送的主循环:

# 游戏主循环while True:    if not pygame.mixer.music.get_busy():        pygame.mixer.music.play()    for event in pygame.event.get():        #pygame这个不能少,否则退出还在循环        if event.type == pygame.QUIT:            exit()
    screen.fill((000))
    # 放烟花    for i, fk in enumerate(fk_list):        if not fk.is_show:             fk.is_show = False            if random.random() < show_frequency * (len(fk_list) - show_n):                show_n += 1                fk.again()            continue        fk.run()        for p in fk.p_list:            x, y = fk.x + p[1] * math.cos(p[0]), fk.y + p[1] * math.sin(p[0])            if random.random() 0.055:                screen.set_at((int(x), int(y)),(255,255,255))            else:                screen.set_at((int(x), int(y)), (int(fk.color[0]), int(fk.color[1]), int(fk.color[2])))
    pygame.display.update()
    time_passed = clock.tick(50)

- END -

文源网络,仅供学习之用,如有侵权,联系删除。

👉 欢迎加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《Spring AI 项目实战》正在更新中..., 基于 Spring AI + Spring Boot 3.x + JDK 21;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,  点击查看项目介绍演示地址:http://116.62.199.48:7070/
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2期已完结,演示链接:http://116.62.199.48/;
  • 专栏阅读地址:https://www.quanxiaoha.com/column

截止目前,累计输出 90w+ 字,讲解图 3713+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等, 戳我加入学习,解锁全部项目,已有3300+小伙伴加入

图片
图片
图片

1.  我的私密学习小圈子,从0到1手撸企业实战项目~

2. 为什么魂斗罗只有128KB却可以实现那么长的剧情?

3. 牛皮!我被银行码农的工资惊到了

4. Cursor 内部工作原理

图片

最近面试BAT,整理一份面试资料 Java面试BATJ通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。

PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。

“在看”支持小哈呀,谢谢啦

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/183713
 
35 次点击