利用Python繪制虎年煙花秀
更新時間:2022年01月26日 14:57:18 作者:川川菜鳥
2022虎年新年即將來臨,小編為大家?guī)砹艘粋€利用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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python將Mysql的查詢數(shù)據(jù)導出到文件的方法
今天小編就為大家分享一篇關(guān)于使用Python將Mysql的查詢數(shù)據(jù)導出到文件的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02

