利用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()
演示:
三、前端代碼
效果:
到此這篇關于利用Python繪制虎年煙花秀的文章就介紹到這了,更多相關Python虎年煙花秀內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!