iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python实现加强版烟花
  • 497
分享到

基于Python实现加强版烟花

2024-04-02 19:04:59 497人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

上一篇实现的烟花里面预留了很多bug,今天过年,把代码给重新规划了一下。 效果如下: 远处是山和月亮,近处是雪和烟花。 由于忙着吃年夜饭,暂时就不详细解释代码了,空下来了再补上。

上一篇实现的烟花里面预留了很多bug,今天过年,把代码给重新规划了一下。

效果如下:

远处是山和月亮,近处是雪和烟花。

由于忙着吃年夜饭,暂时就不详细解释代码了,空下来了再补上。

这里给出代码,祝各位老哥新年快乐。

import pygame
import random
import math

pygame.init()
pygame.mixer.init()
pygame.font.init()

WIN_W = 1420
WIN_H = 900

t1 = 0.18  # 时间流速
show_n = 0
show_frequency = 0.0015  # 烟花绽放频率,数值越大频率越高

color_list = [
    [255, 0, 0]
]

shan_min_height = 400
shan_max_height = 150
yanhua_times = 30
yanhua_size = 900
yanhua_num = 5

yanhua_map = {}
fk_list = []
a = 30
gift = 1


class Fireworks():
    is_show = False
    x, y = 0, 0
    vy = 0
    p_list = []
    color = [0, 0, 0]
    v = 0
    cnt = 0

    def __init__(self, x, y, vy, n=300, color=[0, 255, 0], v=10):
        self.x = x
        self.y = y
        self.vy = vy
        self.color = color
        self.v = v
        self.cnt = 0
        self.p_list = []
        for i in range(n):
            self.p_list.append([random.random() * 2 * math.pi, 0, v * math.pow(random.random(), 1 / 3)])

    def run(self):
        global show_n
        for p in self.p_list:
            p[1] = p[1] + (random.random() * 0.6 + 0.7) * p[2]
            p[2] = p[2] * 0.98
            # TODO 去掉的话会越变越大,打开的话会越来越淡
            # 淡或浓
            if p[2] < 1.2:
                self.color[0] *= 0.9999
                self.color[1] *= 0.9999
                self.color[2] *= 0.9999

            if max(self.color) < 10 or self.y > WIN_H + p[1]:
                show_n -= 1
                self.is_show = False
                break
        self.vy += 10 * t1
        self.y += self.vy * t1


def random_color(l, r):
    return [random.randint(l, r), random.randint(l, r), random.randint(l, r)]


def red_random(l, r):
    return [255, random.randint(l, r), random.randint(l, r)]


def green_random(l, r):
    return [random.randint(l, r), 255, random.randint(l, r)]


def init_yanhua(bg_size):
    yanhua_list = []
    for i in range(yanhua_num):
        x_site = random.randrange(175, 350)  # 雪花圆心位置
        y_site = WIN_H  # 雪花圆心位置
        X_shift = 0  # x 轴偏移量
        radius = random.randint(4, 6)  # 半径和 y 周上升降量
        xxxxx = random_color(150, 255)
        red = xxxxx[0]
        green = xxxxx[1]
        blue = xxxxx[2]
        yanhua_list.append([x_site, y_site, X_shift, radius, red, green, blue])
    return yanhua_list


def init_xue(bg_size):
    snow_list = []
    for i in range(200):
        x_site = random.randrange(0, bg_size[0])  # 雪花圆心位置
        y_site = random.randrange(0, bg_size[1])  # 雪花圆心位置
        X_shift = random.randint(-1, 1)  # x 轴偏移量
        radius = random.randint(4, 6)  # 半径和 y 周下降量
        xxxxx = random_color(150, 255)
        # red = xxxxx[0]
        # green = xxxxx[1]
        # blue = xxxxx[2]
        snow_list.append([x_site, y_site, X_shift, radius, 255, 255, 255])
    return snow_list


def init_shan(bg_size):
    shan_list = []
    # [x,y,color]
    shan_list.append([0, shan_min_height, green_random(1, 150)])
    shan_list.append([200, shan_max_height, green_random(1, 150)])
    shan_list.append([400, shan_min_height, green_random(1, 150)])
    shan_list.append([600, shan_max_height, green_random(1, 150)])
    shan_list.append([800, shan_min_height, green_random(1, 150)])
    shan_list.append([1000, shan_max_height, green_random(1, 150)])
    shan_list.append([1200, shan_min_height, green_random(1, 150)])
    shan_list.append([1400, shan_max_height, green_random(1, 150)])
    shan_list.append([1600, shan_min_height, green_random(1, 150)])
    return shan_list


def draw_shan(shan_list: [], screen):
    n = len(shan_list)
    for i in range(1, n):
        pygame.draw.line(screen, shan_list[i - 1][2], (shan_list[i - 1][0], shan_list[i - 1][1]),
                         (shan_list[i][0], shan_list[i][1]), width=3)


def draw_xue(snow_list: [], screen, bg_size: [], grand_has: set, grand_list: []):
    # 雪花列表循环
    # todo 空中的雪
    for i in range(len(snow_list)):
        # 绘制雪花,颜色、位置、大小
        pygame.draw.circle(screen, (snow_list[i][4], snow_list[i][5], snow_list[i][6]), snow_list[i][:2],
                           snow_list[i][3] - 3)
        # 移动雪花位置(下一次循环起效)
        snow_list[i][0] += snow_list[i][2]
        snow_list[i][1] += snow_list[i][3]
        # 如果雪花落出屏幕,重设位置
        if snow_list[i][1] > bg_size[1]:
            # tmp = []
            snow_list[i][1] = random.randrange(-50, -10)
            snow_list[i][0] = random.randrange(0, bg_size[0])
            x = snow_list[i][0]
            y = bg_size[1]
            while (grand_has.__contains__(x * 10000 + y)):
                y = y - snow_list[i][3]
            grand_has.add(x * 10000 + y)
            grand_list.append(
                [x, y, snow_list[i][2], snow_list[i][3], snow_list[i][4], snow_list[i][5],
                 snow_list[i][6]])


def show_yanhua(fk, screen, n):
    global show_n
    # if not fk.is_show:
    #     fk.is_show = False
    #     if random.random() < show_frequency * (n - show_n):
    #         show_n += 1
    #         fk.again()
    fk.run()
    for p in fk.p_list:
        x, y = fk.x + p[1] * math.cos(p[0]), fk.y + p[1] * math.sin(p[0])
        # x, y = fk.x, fk.y
        if random.random() < 0.055:
            screen.set_at((int(x), int(y)), (int(fk.color[0]), int(fk.color[1]), int(fk.color[2])))
            # screen.set_at((int(x), int(y)), (255, 255, 255))
        else:
            screen.set_at((int(x), int(y)), (int(fk.color[0]), int(fk.color[1]), int(fk.color[2])))


def draw_yanhua(yanhua_list: [], screen, bg_size: []):
    global fk_list
    for i in range(len(yanhua_list)):
        # 绘制雪花,颜色、位置、大小
        pygame.draw.circle(screen, (yanhua_list[i][4], yanhua_list[i][5], yanhua_list[i][6]), yanhua_list[i][:2],
                           yanhua_list[i][3] - 3)
        # 移动雪花位置(下一次循环起效)
        yanhua_list[i][0] += yanhua_list[i][2]
        yanhua_list[i][1] -= yanhua_list[i][3]
        # 如果雪花落出屏幕,重设位置
        if yanhua_list[i][1] <= 0:
            # tmp = []
            yanhua_list[i][1] = WIN_H
            yanhua_list[i][0] = random.randrange(175, 350)
        if yanhua_list[i][1] <= random.randint(150, 300):
            # todo 放烟花
            fk = Fireworks(yanhua_list[i][0], yanhua_list[i][1], -20, n=yanhua_size, color=red_random(1, 150), v=10)
            fk_list.append(fk)
            yanhua_list[i][1] = WIN_H
            yanhua_list[i][0] = random.randrange(175, 350)


def show_shi(a: list, n, screen):
    i = 2 * n - 1
    j = 2 * n
    if i >= len(a):
        i = len(a) - 2
        j = len(a) - 1
    if i >= 0:
        myfont = pygame.font.SysFont('simHei', 30)
        textsurface = myfont.render(a[i], False, random_color(150, 255))
        screen.blit(textsurface, (WIN_W / 2, 30))
    if j >= 0:
        myfont = pygame.font.SysFont('simHei', 100)
        textsurface = myfont.render(a[j], False, red_random(1, 1))
        screen.blit(textsurface, (WIN_W / 2 - 200, 50))


def show_gift(flag, screen, bg_size: list, a):
    if flag == 1:
        pygame.draw.rect(screen, red_random(1, 150), ((175, bg_size[1] - 105), (200, 100)))
        pygame.draw.line(screen, (255, 225, 79), (200, bg_size[1] - 105), (200, bg_size[1] - 5), width=3)
        pygame.draw.line(screen, (255, 225, 79), (350, bg_size[1] - 105), (350, bg_size[1] - 5), width=3)
        pygame.draw.line(screen, (255, 225, 79), (200, bg_size[1] - 105), (350, bg_size[1] - 5), width=3)
        pygame.draw.line(screen, (255, 225, 79), (350, bg_size[1] - 105), (200, bg_size[1] - 5), width=3)
        pygame.draw.circle(screen, (255, 225, 79), (275, bg_size[1] - 55), a / 2)


def show_gift2(flag, screen, bg_size: list, a):
    if flag == 1:
        pygame.draw.rect(screen, red_random(1, 150), ((1044, 793), (1241, 893)))
        pygame.draw.line(screen, (255, 225, 79), (bg_size[0] - 200, bg_size[1] - 105), (bg_size[0] - 200, bg_size[1] - 5), width=3)
        pygame.draw.line(screen, (255, 225, 79), (bg_size[0] - 350, bg_size[1] - 105), (bg_size[0] - 350, bg_size[1] - 5), width=3)
        pygame.draw.line(screen, (255, 225, 79), (bg_size[0] - 200, bg_size[1] - 105), (bg_size[0] - 350, bg_size[1] - 5), width=3)
        pygame.draw.line(screen, (255, 225, 79), (bg_size[0] - 350, bg_size[1] - 105), (bg_size[0] - 200, bg_size[1] - 5), width=3)
        pygame.draw.circle(screen, (255, 225, 79), (bg_size[0] - 275, bg_size[1] - 55), a / 2)


def draw_yueliang(screen):
    pygame.draw.circle(screen, (200, 200, 200), (1350, 50), 100, 100)


def main():
    global show_n
    global fk_list
    bg_size = (WIN_W, WIN_H)

    screen = pygame.display.set_mode(bg_size)
    # bg_img = "./1.png"
    pygame.display.set_caption("新年快乐")
    # bg = pygame.image.load(bg_img)
    pygame.mixer.music.load('D:\\CloudMusic\\祖海 - 好运来.mp3')
    grand_list = []
    font_values = ['新年快乐']

    grand_has = set()

    clock = pygame.time.Clock()
    yanhua_list = init_yanhua(bg_size)
    snow_list = init_xue(bg_size)
    shan_list = init_shan(bg_size)
    # 游戏主循环
    while True:
        show_n = 0
        if not pygame.mixer.music.get_busy():
            pygame.mixer.music.play()
        for event in pygame.event.get():
            if event.type == pygame.MOUSEBUTTONUP:
                print(event)
            if event.type == pygame.QUIT:
                exit()
        screen.fill((0, 0, 0))
        flag = 0
        min_height = 100000
        # todo 地上的积雪
        for i in range(len(grand_list)):
            if grand_list[i][0] < 375 and grand_list[i][1] < bg_size[1] - gift:
                flag = 1
            if grand_list[i][0] < 375:
                min_height = min(min_height, grand_list[i][1])
        # if len(fk_list) != 0:
        #     print(len(fk_list))
        # # 放烟花
        show_shi(font_values, 0, screen)
        draw_yueliang(screen)
        draw_shan(shan_list, screen)
        if flag == 1:
            draw_yanhua(yanhua_list, screen, bg_size)
            for fk in fk_list:
                fk.run()
                for p in fk.p_list:
                    x, y = fk.x + p[1] * math.cos(p[0]), fk.y + p[1] * math.sin(p[0])
                    screen.set_at((int(x), int(y)), (int(fk.color[0]), int(fk.color[1]), int(fk.color[2])))
                fk.cnt = fk.cnt + 1
        tmp = []
        for fk in fk_list:
            if fk.cnt <= yanhua_times:
                tmp.append(fk)
                break
        show_gift(flag, screen, bg_size, a)
        # show_gift2(flag, screen, bg_size, a)
        fk_list = tmp
        min_height = 100000
        # todo 地上的积雪
        for i in range(len(grand_list)):
            if grand_list[i][0] < 375:
                min_height = min(min_height, grand_list[i][1])

        draw_xue(snow_list, screen, bg_size, grand_has, grand_list)

        for i in range(len(grand_list)):
            pygame.draw.circle(screen, (grand_list[i][4], grand_list[i][5], grand_list[i][6]), grand_list[i][:2],
                               grand_list[i][3] - 3)
        pygame.display.update()
        time_passed = clock.tick(50)


if __name__ == '__main__':
    main()

以上就是基于python实现加强版烟花的详细内容,更多关于Python烟花的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于Python实现加强版烟花

本文链接: https://www.lsjlt.com/news/138118.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Python实现加强版烟花
    上一篇实现的烟花里面预留了很多bug,今天过年,把代码给重新规划了一下。 效果如下: 远处是山和月亮,近处是雪和烟花。 由于忙着吃年夜饭,暂时就不详细解释代码了,空下来了再补上。 ...
    99+
    2024-04-02
  • 基于Python实现烟花效果的示例代码
    python烟花代码 如下 # -*- coding: utf-8 -*- import math, random,time import threading import tki...
    99+
    2024-04-02
  • 基于Python记录一场2023的烟花
    弹指间,2023已经到来,新的一年,祝大家新年快乐,阖家幸福呀~~~ 好吧,进入正题,2023的到来,肯定少不了烟花吧(外面不让放炮,那咱们就用python放炮【DOGE】) 首先...
    99+
    2023-01-04
    Python绘制烟花 Python烟花
  • 基于JavaScript实现在线网页烟花效果
    目录实现效果关键步骤源码实现效果 关键步骤 随机颜色 var hue = Math.random() * 360;var hueVariance = 30; functio...
    99+
    2023-02-03
    JavaScript在线网页烟花效果 JavaScript 烟花效果 JavaScript烟花
  • 基于Html+CSS+JS实现手动放烟花效果
    目录效果展示实现代码HtmlCssJavaScript雷迪森安的乡亲们,欢迎来到老实人的前端课堂,上次写了一个新春小盲盒,这大过年的,我把烟花都给你们准备好了,今天我们来写个小烟花吧...
    99+
    2024-04-02
  • python代码实现烟花实例
    实现代码如下: # -*- coding: utf-8 -*- import math, random,time import threading import tkinter ...
    99+
    2024-04-02
  • 基于雪花算法实现增强版ID生成器详解
    目录基于雪花算法的增强版ID生成器快速开始配置解析目前提供两个配置类详情生产推荐使用方式JMH 性能测试测试机硬件情况Sequence 配置参数JMH参数测试结果Tip基于雪花算法的...
    99+
    2022-11-13
    雪花算法实现ID生成器 雪花算法 ID生成
  • 基于JavaScript实现除夕烟花秀与随机祝福语
    目录项目截图进入后的界面点击按钮点击之后的动画烟花结束后的界面代码实现HTML代码CSS代码javaScript代码项目截图 进入后的界面 点击按钮 点击之后的动画 烟花结束后...
    99+
    2024-04-02
  • 基于Html+CSS+JS怎样实现手动放烟花效果
    基于Html+CSS+JS怎样实现手动放烟花效果,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。效果展示注意看有两种模式哦,可以自由切换,鼠标点哪里哪里有烟花,还...
    99+
    2023-06-28
  • 怎么用Python实现烟花效果
    本篇内容主要讲解“怎么用Python实现烟花效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现烟花效果”吧!效果如下:这里给出代码,祝各位老哥新年快乐。import&nbs...
    99+
    2023-06-29
  • 用python实现漂亮的烟花demo
    link import tkinter as tk from PIL import Image, ImageTk from time import time, sleep from random import choice, unifo...
    99+
    2023-01-31
    烟花 漂亮 python
  • 基于JavaScript如何实现除夕烟花秀与随机祝福语
    这篇文章主要介绍基于JavaScript如何实现除夕烟花秀与随机祝福语,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!项目截图进入后的界面点击按钮点击之后的动画烟花结束后的界面代码实现涉及的技术:HTML5多媒体,CS...
    99+
    2023-06-29
  • Python 浪漫烟花实现代码全解
    1 旖旎风景 马上虎年了,也是我的生肖年,很激动!(不小心暴露了年龄,哈哈哈......),这里先给大家拜年啦,祝大家虎年快乐,虎年爆富!  首先一首原创诗分享给大家,...
    99+
    2024-04-02
  • 含源码,用Python实现浪漫烟花
    目录 前言 环境准备 代码编写 效果展示 前言 Python实现浪漫的烟花特效 现在很多地方都不能放烟花了,既然看不到, 那作为程序猿的我们还不能自己用代码做一个吗? 今天就带大家用代码做一个烟花特效吧。 环境准备 这里使用到的...
    99+
    2023-09-12
    python pandas
  • Python如何实现浪漫烟花效果
    这篇文章主要介绍了Python如何实现浪漫烟花效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1 旖旎风景马上虎年了,也是我的生肖年,很激动!(不小心暴露了年龄,哈哈哈.....
    99+
    2023-06-29
  • 怎么用Python实现雪夜烟花景
    这篇文章主要为大家展示了“怎么用Python实现雪夜烟花景”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用Python实现雪夜烟花景”这篇文章吧。运行截图运行效果:什么?你说你看不清烟花?那...
    99+
    2023-06-29
  • Python粒子烟花动态效果实现
    目录效果展示实现代码剩下代码跨年倒计时还有18天?我已经开始整烟花了,虽然不是很好看吧,但是也能将就看看 这个的背景图,音乐,还有文字都是可以自己修改的哦 效果展示 依次导入本次...
    99+
    2023-01-03
    Python粒子烟花 Python动态烟花 Python烟花
  • python实现跨年烟花动态效果
    目录Pygame 绘制烟花的基本原理用Python和Tkinter设计烟花将烟花绽放转译成代码使用Tkinter模拟朋友们,有多久没放烟花了?今年你所在的地方允许放烟花么?既然我们不...
    99+
    2023-01-03
    python实现跨年烟花 python实现烟花效果 python烟花
  • Python Pygame实现可控制的烟花游戏
    目录实现效果描述效果代码地址解析main.pycore.pyfireworks.py写在最后自控烟花升空 实现效果描述效果代码地址解析main.pycore.pyfireworks....
    99+
    2024-04-02
  • python实现烟花的实例代码怎么编写
    本篇文章给大家分享的是有关python实现烟花的实例代码怎么编写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现代码如下:# -*- coding:&nb...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作