利用Python绘制虎年烟花秀
作者:川川菜鸟 发布时间:2022-10-08 06:03:49
标签: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()
演示:
三、前端代码
效果:
来源:https://blog.csdn.net/weixin_46211269/article/details/122686170


猜你喜欢
- 今天是边复习边创作博客的第三天,我今年大二,我们专业开的有这门课程,因为喜欢所以更加认真学习,本以为没人看呢,看了后台浏览量让我更加认真创作
- 数据结构typedef struct { PyObject_VAR_HEAD Py_ha
- 一、创建数据库标准1.表的必备三个字段:id、gmt_create、gmt_modified2.gmt_create是创建时间,gmt_mo
- 代码如下:CREATE FUNCTION [dbo].[udf_DaysInMonth] ( @Date DATETIME )
- MySql授权用户权限如何设置首先:去 mysql 库中查看 root 用户的权限select * from user where user
- SCRIPT 标记 用于包含JavaScript代码. 属性 LANGUAGE&nbs
- Python 是一门优雅的语言,简洁的语法,强大的功能。当然丰富的第三方库,更能加速开发。那么问题来了,如何安装这些第三方库(包)呢?安装第
- 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nullable Default C
- 使用Python内置函数:bin()、oct()、int()、hex()可实现进制转换。 先看Python官方文档中对这几个内置函数的描述:
- 具体的网址倒是没保存,可是我这个人习惯把好的代码记起方法保存下来,现在贴出来,希望原作者体谅。 ---上个月月初第一天 select CON
- 1. MySQL Connector1.1 创建连接import mysql.connector config={ "
- <em>`mark` set('index','best','hot')<
- 关于窗口函数的基础,请看文章SQL窗口函数许多常见的聚合函数也可以作为窗口函数使用,包括AVG()、SUM()、COUNT()、MAX()以
- 手风琴下拉菜单实现的效果更灵活,不同与传统的下拉菜单,本文就为大家分享一段javascript手风琴下拉菜单实现代码,先看一看效果图:具体的
- 程序开始:<% Server.ScriptTimeout = &HE10 '&
- 准备工作下载python,本文以python3.6为例。python3.6下载地址:python3下载地址,选择合适的版本安装。安装成功后,
- 一、线程队列queue队列:使用方法同进程的Queue一样如果必须在多个线程之间安全地交换信息时,队列在线程编程中尤其有用。重要:q.put
- 在Python自带的编辑器IDLE中或者Python shell中不能使用cd命令,那么跳到目标路径呢。方法是使用os包下的相关函数实现路径
- 一、go语言内存布局想象一下,你有一个如下的结构体。type MyData struct {
- 如下所示:daffodil = int(input('请输入一个三位数:'))if daffodil == pow(daff