脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 利用Python绘制虎年烟花秀

利用Python绘制虎年烟花秀

2022-09-04 12:00川川菜鸟 Python

2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试

一、演示效果

b站:虎年烟花演示

二、python代码

import pygame
from math import *
from pygame.locals import *

import random


class firew:
    
    def __init__(self, pos, color, light, size, move):
        self.pos = list(pos)
        self.color = list(color)
        self.light = light
        self.size = size
        
        self.move = list(move)
    
    def force(self, force):
        self.move[0] += force[0]
        self.move[1] += force[1]

        self.move[0] *= force[2]
        self.move[1] *= force[2]
    
    def update(self):
        self.pos[0] += self.move[0]
        self.pos[1] += self.move[1]

    def render(self, fenster, glitter):
        glitter = (glitter and random.randint(40, 100)/100) or 1
        c = rund( mult(self.color, self.light*glitter) )
        rad = int(round(self.light* self.size))
        rad += rad < 1
        #print(c)
        
        pygame.draw.circle(fenster, c, rund(self.pos), rad)
        

def summon(fws, pos, pre_move = [0,0]):
    mix.stop()
    #anz = random.randint(30, 250)
    anz = random.randint(200, 350)
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    
        
    for i in range(anz):
        ang = random.randint(0, 360)        
        speed = random.randint(100, 1000) / 250
        
        move = (cos(radians(ang))*speed + pre_move[0],
                sin(radians(ang))*speed + pre_move[1])

        light = random.randint(60, 100)/100
        size = random.randint(100, 300)/100
        
        fws.append( firew(pos, (r,g,b), light, size, move) )

    # Sound abspielen
    l, r = ( 0.2 + 0.8*(ww-pos[0])/ww, 0.2 + 0.8*pos[0]/ww )
    mix.set_volume(l, r)
    
    mix.play(sound)

    return fws


def rund(liste):
    new = []
    for i in liste:
        new.append(int(round(i)))
    
    return new

def mult(color, multi):
    new = list(color)
    new[0] *= multi
    new[1] *= multi
    new[2] *= multi
    
    return new


pygame.init()

sound = pygame.mixer.Sound("firew.wav")
mix = pygame.mixer.Channel(0)
mix.set_volume(1, 1)

bg = (0, 0, 0)
ww, wh = (1200, 800)
fenster = pygame.display.set_mode((ww, wh))
#pygame.display.set_caption("[Leertaste] für Pause; [c] für automatisches Feuerwerk")


fws = [] # firework particles
rockets = []
force = [0, 0.02, 0.985]

max_counter = random.randint(0, 200)
counter = max_counter

auto  = True
pause = False

run = 1
clock = pygame.time.Clock()

while run:
    pygame.display.set_caption("[Spacebar] to pause; [c] disable automatic fireworks")
    counter -= (auto and not pause)

    if counter <= 0: # neues erstellen
        #pos = [random.randint(ww*1/4, ww*3/4), random.randint(wh*1/4, wh*3/5)]
        pos = [random.randint(ww*2/5, ww*3/5), wh]
        move = [random.randint(-100, 100)/100, -random.randint(800, 1500)/110]
        
        rockets.append( firew(pos, (255, 255, 255), 1, 2, move) )
        
        #fuse = random.randint(50, 150) # Zuendschnur
        fuse = random.randint(50, 80)
        rockets[-1].fuse = fuse

        #fws = summon(fws, pos)
        
        max_counter = random.randint(10, 100)
        counter = max_counter

    for e in pygame.event.get():
        if e.type == QUIT:
            run = 0
        if e.type == KEYDOWN:
            if e.key == K_c:
                auto = not auto
            if e.key == K_SPACE:
                pause = not pause
            if e.key == K_v:
                fws = []; rockets = []
            
        if e.type == MOUSEBUTTONDOWN:
            fws = summon(fws, e.pos)
        

    fenster.fill(bg)
    dellist1 = []
    dellist2 = []

    for i, rocket in enumerate(rockets):
        if not pause:
            rocket.force(force)
            rocket.update()
            
        rocket.render(fenster, False)
        rocket.fuse -= not pause
        
        if rocket.fuse < 0:
            dellist1.append(i)
            # explosion erschaffen
            fws = summon(fws, rocket.pos, rocket.move)
            
    
    for i, f in enumerate(fws):
        if not pause:
            f.force(force)
            f.update()


        f.render(fenster, True and not pause)

        f.light -= (not pause) * random.randint(0, 150) / 7500

        if f.light < 0:
            dellist2.append(i)

    dellist1.reverse()
    dellist2.reverse()
    
    for d in dellist1:
        del rockets[d]
    for d in dellist2:
        del fws[d]

    pygame.display.update()
    clock.tick(80)


pygame.quit()

演示:

利用Python绘制虎年烟花秀

 

三、前端代码

效果:

利用Python绘制虎年烟花秀

利用Python绘制虎年烟花秀

到此这篇关于利用Python绘制虎年烟花秀的文章就介绍到这了,更多相关Python虎年烟花秀内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_46211269/article/details/122686170

延伸 · 阅读

精彩推荐
  • Pythonselenium+python自动化测试环境搭建步骤

    selenium+python自动化测试环境搭建步骤

    在本文中小编给大家分享了关于selenium+python自动化测试环境搭建的相关步骤以及知识点内容,需要的朋友们参考学习下。...

    脚本之家9562021-07-01
  • PythonPython绘制K线图之可视化神器pyecharts的使用

    Python绘制K线图之可视化神器pyecharts的使用

    这篇文章主要介绍了Python绘制K线图之可视化神器pyecharts的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    王小王-1239292021-09-12
  • Pythonpyshp创建shp点文件的方法

    pyshp创建shp点文件的方法

    今天小编就为大家分享一篇pyshp创建shp点文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    bradzhou12862021-05-10
  • Pythonpython enumerate函数的使用方法总结

    python enumerate函数的使用方法总结

    这篇文章主要介绍了python enumerate使用方法总结,enumerate函数用于遍历序列中的元素以及它们的下标,有兴趣的可以了解一下...

    pythontab11282020-12-18
  • PythonPython实现单例模式的5种方法

    Python实现单例模式的5种方法

    单例模式应该是应用最广泛,实现最简单的一种创建型模式。本文详细的介绍了Python实现单例模式的5种方法,具有一定的参考价值,感兴趣的小伙伴们可以...

    云崖先生4412021-12-01
  • PythonVTK与Python实现机械臂三维模型可视化详解

    VTK与Python实现机械臂三维模型可视化详解

    这篇文章主要介绍了VTK与Python实现机械臂三维模型可视化详解,具有一定借鉴价值,需要的朋友可以参考下。...

    冬木远景3122020-12-24
  • Pythonpytorch常用数据类型所占字节数对照表一览

    pytorch常用数据类型所占字节数对照表一览

    这篇文章主要介绍了pytorch常用数据类型所占字节数对照表一览,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    yrwang_xd11482021-11-02
  • Pythonpython数据结构之列表和元组的详解

    python数据结构之列表和元组的详解

    这篇文章主要介绍了python数据结构之列表和元组的详解的相关资料,希望通过本文能帮助到大家,让大家彻底理解掌握这部分内容,需要的朋友可以参考下...

    蓝天的IT生涯3402020-12-09