利用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()演示:

三、前端代碼
效果:


到此這篇關(guān)于利用Python繪制虎年煙花秀的文章就介紹到這了,更多相關(guān)Python虎年煙花秀內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python練習(xí)之制作企業(yè)獎(jiǎng)金計(jì)算器
在本篇博客中,我們將使用Python代碼解決一個(gè)企業(yè)獎(jiǎng)金計(jì)算的問(wèn)題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
Python實(shí)現(xiàn)運(yùn)行其他程序的四種方式實(shí)例分析
這篇文章主要介紹了Python實(shí)現(xiàn)運(yùn)行其他程序的四種方式,結(jié)合實(shí)例形式分析了Python執(zhí)行其他程序相關(guān)模塊與函數(shù)使用技巧,需要的朋友可以參考下2017-08-08
python 自動(dòng)監(jiān)控最新郵件并讀取的操作
這篇文章主要介紹了python 自動(dòng)監(jiān)控最新郵件并讀取的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
使用Python將Mysql的查詢數(shù)據(jù)導(dǎo)出到文件的方法
今天小編就為大家分享一篇關(guān)于使用Python將Mysql的查詢數(shù)據(jù)導(dǎo)出到文件的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
機(jī)器學(xué)習(xí)10大經(jīng)典算法詳解
這篇文章主要為大家詳細(xì)介紹了機(jī)器學(xué)習(xí)10大經(jīng)典算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12

