python代码画动态烟花源码

亲爱的读者们,今天我们要讨论,python绘制烟花特定爆炸效果 python炫酷烟花表白源代码,一起探索吧!

一、内容概述

本文同之前的飞机大战一样,面向python3的初学者python期末总结怎么写,python总结报告1000字。在这篇文章中,我们通过pygame、math、random三个包提供的内容实现满屏幕的烟花绽放,烟花会从屏幕最底端发射,沿着直线,并在随机位置发生爆炸,爆炸后,会在爆炸位置产生众多烟花颗粒,这些烟花颗粒会渐渐消失.

二、最终代码及成果展示

最终代码

import pygame
import random
import math

class Firework():
    def __init__(self, x, y, screen):
        self.screen = screen
        self.start_x = x
        self.start_y = y
        self.cur_x = x
        self.cur_y = y
        self.color = (random.randint(0,255), random.randint(0,255), random.randint(0,255))

    def draw(self):
        .circle(self.screen, self.color, (self.cur_x, self.cur_y), 5)

    def move_up(self):
        self.cur_y -= 5

class Particle():
    def __init__(self, x, y, screen):
        self.x = x
        self.y = y
        self.screen = screen
        self.color = (random.randint(0,255), random.randint(0,255), random.randint(0,255))
        self.speed = random.uniform(1, 3)
        self.angle = random.uniform(0, 2 * )
        self.radius = random.randint(2, 4)
         = random.randint(10, 20)   #决定烟花颗粒存活的时间

    def move(self):
        self.x += self.speed * (self.angle)
        self.y += self.speed * (self.angle)
         -= 1

    def draw(self):
        .circle(self.screen, self.color, (int(self.x), int(self.y)), self.radius)

def main():
    ()
    screen = pygame.display.set_mode((800,600))
    clock = .Clock()

    fireworks = []
    particles = []

    while True:
        for event in ():
            if  == :
                ()

        fireworks.append(Firework(random.randint(0,800), 600, screen))

        ((0,0,0))

        for f in fireworks:
            f.draw()
            f.move_up()
            if random.randint(1, 100) > 96:
                for _ in range(random.randint(50,100)):
                    particles.append(Particle(f.cur_x, f.cur_y, screen))
                fireworks.remove(f)

        for p in particles:
            p.draw()
            p.move()
            if p.life <= 0:
                particles.remove(p)

        ()
        (60)  # 控制刷新率

main()

三、代码详解

首先我们引入三个必要的包

import pygame
import random
import math

然后,我们定义了一个最重要的类,及决定烟花颗粒的类,在Particle类中,最为重要的是life属性,通过调节life的random范围,可以随机决定烟花颗粒的存活时间;radius属性决定烟花颗粒的大小,其余属性一看就懂

class Particle():
    def __init__(self, x, y, screen):
        self.x = x
        self.y = y
        self.screen = screen
        self.color = (random.randint(0,255), random.randint(0,255), random.randint(0,255))
        self.speed = random.uniform(1, 3)
        self.angle = random.uniform(0, 2 * )
        self.radius = random.randint(2, 4)
         = random.randint(10, 20)   #决定烟花颗粒存活的时间

    def move(self):
        self.x += self.speed * (self.angle)
        self.y += self.speed * (self.angle)
         -= 1

    def draw(self):
        .circle(self.screen, self.color, (int(self.x), int(self.y)), self.radius)

这个类用于生成烟花本身

class Firework():
    def __init__(self, x, y, screen):
        self.screen = screen
        self.start_x = x
        self.start_y = y
        self.cur_x = x
        self.cur_y = y
        self.color = (random.randint(0,255), random.randint(0,255), random.randint(0,255))

    def draw(self):
        .circle(self.screen, self.color, (self.cur_x, self.cur_y), 5)

    def move_up(self):
        self.cur_y -= 5

最后,我们定义主函数,并在主函数中实现代码循环,完成最主要部分

def main():
    ()
    screen = pygame.display.set_mode((800,600))
    clock = .Clock()

    fireworks = []
    particles = []

    while True:
        for event in ():
            if  == :
                ()

        fireworks.append(Firework(random.randint(0,800), 600, screen))

        ((0,0,0))

        for f in fireworks:
            f.draw()
            f.move_up()
            if random.randint(1, 100) > 96:
                for _ in range(random.randint(50,100)):
                    particles.append(Particle(f.cur_x, f.cur_y, screen))
                fireworks.remove(f)

        for p in particles:
            p.draw()
            p.move()
            if p.life <= 0:
                particles.remove(p)

        ()
        (60)  # 控制刷新率


原文地址1:https://blog.csdn.net/wahzx/article/details/133799541
参考资料:python中用turtle画一个圆形 https://blog.csdn.net/SXIAOYAN_/article/details/140061099

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值