利用Python绘制虎年烟花秀

目录
  • 一、演示效果
  • 二、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虎年烟花秀内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python新年炫酷烟花秀代码

    先介绍下 Pygame 绘制烟花的基本原理,烟花从发射到绽放一共分为三个阶段: 1,发射阶段:在这一阶段烟花的形状是线性向上,通过设定一组大小不同.颜色不同的点来模拟“向上发射” 的运动运动,运动过程中 5个点被赋予不同大小的加速度,随着时间推移,后面的点会赶上前面的点,最终所有点会汇聚在一起,处于 绽放准备阶段: 2,烟花绽放:烟花绽放这个阶段,是由一个点分散多个点向不同方向发散,并且每个点的移动轨迹可需要被记录,目的是为了追踪整个绽放轨迹. 3,烟花凋零,此阶段负责描绘绽放后烟花的效果,绽放

  • python实现烟花小程序

    本文实例为大家分享了python实现烟花小程序的具体代码,供大家参考,具体内容如下 ''' FIREWORKS SIMULATION WITH TKINTER *self-containing code *to run: simply type python simple.py in your console *compatible with both Python 2 and Python 3 *Dependencies: tkinter, Pillow (only for backgroun

  • 利用Python写一场新年烟花秀

    目录 1.导库 2.烟花颜色 3.定义烟花类 4.燃放烟花 5.启动 我们用到的 Python 模块包括:tkinter.PIL.time.random.math,如果第三方模块没有装的话,pip install 一下即可,下面看一下代码实现. 1.导库 import tkinter as tk from PIL import Image, ImageTk from time import time, sleep from random import choice, uniform, randi

  • python实现浪漫的烟花秀

    无意中看到一段用Tkinter库写的放烟花的程序,就跟着跑了一遍. 设计理念:通过让画面上一个粒子分裂为X数量的粒子来模拟爆炸效果.粒子会发生"膨胀",意思是它们会以恒速移动且相互之间的角度相等.这样就能让我们以一个向外膨胀的圆圈形式模拟出烟花绽放的画面.经过一定时间后,粒子会进入"自由落体"阶段,也就是由于重力因素它们开始坠落到地面,仿若绽放后熄灭的烟花. 首先我们写一个粒子类,表示烟花事件中的每个粒子,包含大小,颜色,位置,速度等属性以及粒子经历的三个阶段的函数

  • 新年快乐! python实现绚烂的烟花绽放效果

    做了一个Python的小项目.利用了一点python的可视化技巧,做出烟花绽放的效果,文章的灵感来自网络上一位大神. 一.编译环境 Pycharm 二.模块 1.tkinter:这个小项目的主角,是一个python图形模块.且Python3已经自带了该模块,不用另外安装.它有点像java中的swing图形模块(由众多组件集成,组件通过创建实例添加,组件通过坐标定位在窗口上). 2.PIL:Python Imaging Library,是Python平台的图像处理标准模块.在Python3也是自带

  • python烟花效果的代码实例

    天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花,工作之余也可以随时让程序为自己放一场烟花秀. 这个有趣的小项目并不复杂,只需一点可视化技巧,100余行Python代码和程序库Tkinter,最后我们就能达到下面这个效果: 学完本教程后,你也能做出这样的烟花秀. 整体概念梳理 我们的整个理念比较简单. 如上图示,我们这里通过让画面上一个粒子分裂为X数量的粒子来模拟爆炸效果.粒子会发生"膨胀",意思是它们会以恒速移动且相互之间的角度相等.

  • python代码实现烟花实例

    实现代码如下: # -*- coding: utf-8 -*- import math, random,time import threading import tkinter as tk import re #import uuid Fireworks=[] maxFireworks=8 height,width=600,600 class firework(object): def __init__(self,color,speed,width,height): #uid=uuid.uuid

  • 利用Python绘制虎年烟花秀

    目录 一.演示效果 二.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.colo

  • Python利用Turtle绘制虎年图像

    目录 导语 一.代码展示 二.效果展示 导语 2022年是农历壬寅虎年,在自然界中,虎有“百兽之王”之称 它的王者之风与勇猛,被作为威仪和权势的象征,千百年来,人们崇虎.刻虎.画虎.剪虎……形成了极具特色的中国虎文化,而今天给大家用Turtle绘制虎年图像,带给大家虎年的祝福! 虎年送头虎,全家乐悠悠,虎蹄为你开财路,虎尾为你拂忧愁. 虎耳为你撞鸿运,虎背为你驮康寿,让这头虎伴你左右,你不虎也虎 也希望大家在新年里,虎虎生威.虎年大吉 一.代码展示 本文是基于Turtle绘制的小老虎呢!本文的全

  • 利用Python绘制有趣的万圣节南瓜怪效果

    关于万圣节 万圣节又叫诸圣节,在每年的11月1日,是西方的传统节日;而万圣节前夜的10月31日是这个节日最热闹的时刻.在中文里,常常把万圣节前夜(Halloween)讹译为万圣节(All Saints' Day). 为庆祝万圣节的来临,小孩会装扮成各种可爱的鬼怪向逐家逐户地敲门,要求获得糖果,否则就会捣蛋.而同时传说这一晚,各种鬼怪也会装扮成小孩混入群众之中一起庆祝万圣节的来临,而人类为了让鬼怪更融洽才装扮成各种鬼怪. 不知从何时开始,西方的节日一个个的走进了天朝,情人节.圣诞节.感恩节.万圣节

  • 利用python绘制数据曲线图的实现

    "在举国上下万众一心.众志成城做好新冠肺炎疫情防控工作的特殊时刻,我们不能亲临主战场,但我们能坚持在大战中坚定信心.不负韶华." 1.爬取新闻保存为json文件,并将绘图所需数据保存至数据库 数据库表结构: 代码部分: import pymysql import re import sys,urllib,json from urllib import request from datetime import datetime import pandas as pd Today=date

  • 利用python绘制中国地图(含省界、河流等)

    我们可以使用Basemap这个工具包来实现中国地图的绘制 首先需要加载一些包: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap Basemap包就是气象画图的利器,现在我们就可以愉快的画图了! plt.figure(1) map=Basemap() map.drawcoastlines() plt.title(r'$World\ Map$',fontsize=2

  • 利用python绘制正态分布曲线

    使用Python绘制正态分布曲线,借助matplotlib绘图工具: #-*-coding:utf-8-*- """ python绘制标准正态分布曲线 """ # ============================================================== import numpy as np import math import matplotlib.pyplot as plt def gd(x, mu=0, s

  • 中秋快到了利用 python 绘制中秋礼物

    目录 导语 正文 总结 导语 ​ 哈喽哈喽!大家上午好,我是木木子. 新的一天开始啦,之前写了很多的画图代码嗯哼!你们还记得嘛?我就不整理了蛮多滴,你们可以自己翻翻往期的文章哈,有简单的 也有难点儿的总有一款适合你们~嘿嘿. 话说--中秋也快到了,你们放几天假吖? 假期长的小伙伴儿知道回家带什么礼物更让家人开心嘛?假装不知道.jpg. 小编告诉你们:当然是带着你们的男朋友.女朋友回家了~,来来来,有了对象没得对象的都看过来哈,时间仓促,给你们的中秋福利送了哈,写一个简单的中秋表白的画图源码啦!

  • 详解如何利用Python绘制迷宫小游戏

    目录 构思 绘制迷宫 走出迷宫 完整代码 更大的挑战 关于坐标系设置 周末在家,儿子闹着要玩游戏,让玩吧,不利于健康,不让玩吧,扛不住他折腾,于是想,不如一起搞个小游戏玩玩! 之前给他编过猜数字 和 掷骰子 游戏,现在已经没有吸引力了,就对他说:“我们来玩个迷宫游戏吧.” 果不其然,有了兴趣,于是和他一起设计实现起来,现在一起看看我们是怎么做的吧,说不定也能成为一个陪娃神器~ 先一睹为快: 构思 迷宫游戏,相对比较简单,设置好地图,然后用递归算法来寻找出口,并将过程显示出来,增强趣味性. 不如想

  • 如何利用 Python 绘制动态可视化图表

    目录 一.安装相关的模块 二.gif和matplotlib的结合 三.gif和plotly的结合 四.matplotlib多子图动态可视化 五.动态气泡图 一.安装相关的模块 首先第一步的话我们需要安装相关的模块,通过pip命令来安装 pip install gif 另外由于gif模块之后会被当做是装饰器放在绘制可视化图表的函数上,主要我们依赖的还是Python当中绘制可视化图表的matplotlib.plotly.以及altair这些模块,因此我们还需要下面这几个库 pip install "

  • 利用Python绘制酷炫的3D地图

    目录 1.重庆市3D地图 2.中国3D地图一 3.中国3D地图二 4.中国3D地图三 5.地球展示 之前我们介绍了很多Python地图可视化的内容,本次主要介绍如何Python绘制3D地图,还是比较神奇的,下面让我们一起一饱眼福吧! 1.重庆市3D地图 from pyecharts import options as opts from pyecharts.charts import Map3D from pyecharts.globals import ChartType # 经纬度 exam

随机推荐