旖旎风景——浪漫烟花(Python实现)


1 旖旎风景


马上虎年了,也是我的生肖年,很激动!(不小心暴露了年龄,哈哈哈…),这里先给大家拜年啦,祝大家虎年快乐,虎年爆富!

首先一首原创诗分享给大家,然后欣赏一下烟花代码,用Python实现的。

魏巍中华龙在飞,能驭其者方可主沉浮,今夕新年,晚风过威奢, 请卿听我歌:

新年傲啸

烟花冲破九霄,

正如神雕在傲啸;

黑夜捅了它一刀;

五彩的血溅在黑夜外套;

于是傲啸浸透夜的衣角;

只愿与卿震响九霄!

龙吟虎啸!

2 请卿赏之


旖旎风景

3 Python代码实现


#=导入包====

‘’'导入pygame,Python Pygame 是一款专门为开发和设计 2D 电子游戏而生的软件包,

它支 Windows、Linux、Mac OS 等操作系统,具有良好的跨平台性。‘’’

import pygame

from random import randint, uniform, choice

import math

#=首先设置全局变量==========

vector = pygame.math.Vector2

重力变量

gravity = vector(0, 0.3)

控制窗口的大小

DISPLAY_WIDTH = DISPLAY_HEIGHT = 800

颜色选项

trail_colours = [(45, 45, 45), (60, 60, 60), (75, 75, 75), (125, 125, 125), (150, 150, 150)]

dynamic_offset = 1

static_offset = 3

#=Firework : 整体部分;==========

class Firework:

def init(self):

随机颜色

self.colour = (randint(0, 255), randint(0, 255), randint(0, 255))

self.colours = (

(randint(0, 255), randint(0, 255), randint(0, 255)),

(randint(0, 255), randint(0, 255), randint(0, 255)),

(randint(0, 255), randint(0, 255), randint(0, 255)))

self.firework = Particle(randint(0, DISPLAY_WIDTH), DISPLAY_HEIGHT, True,

self.colour) # Creates the firework particle

self.exploded = False

self.particles = []

self.min_max_particles = vector(100, 225)

def update(self, win): # 每帧调用

if not self.exploded:

self.firework.apply_force(gravity)

self.firework.move()

for tf in self.firework.trails:

tf.show(win)

self.show(win)

if self.firework.vel.y >= 0:

self.exploded = True

self.explode()

else:

for particle in self.particles:

particle.apply_force(vector(gravity.x + uniform(-1, 1) / 20, gravity.y / 2 + (randint(1, 8) / 100)))

particle.move()

for t in particle.trails:

t.show(win)

particle.show(win)

def explode(self):

amount 数量

amount = randint(self.min_max_particles.x, self.min_max_particles.y)

for i in range(amount):

self.particles.append(Particle(self.firework.pos.x, self.firework.pos.y, False, self.colours))

def show(self, win):

pygame.draw.circle(win, self.colour, (int(self.firework.pos.x), int(self.firework.pos.y)), self.firework.size)

def remove(self):

if self.exploded:

for p in self.particles:

if p.remove is True:

self.particles.remove§

if len(self.particles) == 0:

return True

else:

return False

#Particle:烟花粒子(包含轨迹)======

class Particle:

def init(self, x, y, firework, colour):

self.firework = firework

self.pos = vector(x, y)

self.origin = vector(x, y)

self.radius = 20

self.remove = False

self.explosion_radius = randint(5, 18)

self.life = 0

self.acc = vector(0, 0)

trail variables

self.trails = [] # stores the particles trail objects

self.prev_posx = [-10] * 10 # stores the 10 last positions

self.prev_posy = [-10] * 10 # stores the 10 last positions

if self.firework:

self.vel = vector(0, -randint(17, 20))

self.size = 5

self.colour = colour

for i in range(5):

self.trails.append(Trail(i, self.size, True))

else:

self.vel = vector(uniform(-1, 1), uniform(-1, 1))

self.vel.x *= randint(7, self.explosion_radius + 2)

self.vel.y *= randint(7, self.explosion_radius + 2)

向量

self.size = randint(2, 4)

self.colour = choice(colour)

5 个 tails总计

for i in range(5):

self.trails.append(Trail(i, self.size, False))

def apply_force(self, force):

self.acc += force

def move(self):

if not self.firework:

self.vel.x *= 0.8

self.vel.y *= 0.8

self.vel += self.acc

self.pos += self.vel

self.acc *= 0

if self.life == 0 and not self.firework: # 检查粒子的爆炸范围

distance = math.sqrt((self.pos.x - self.origin.x) ** 2 + (self.pos.y - self.origin.y) ** 2)

if distance > self.explosion_radius:

self.remove = True

self.decay()

self.trail_update()

self.life += 1

def show(self, win):

pygame.draw.circle(win, (self.colour[0], self.colour[1], self.colour[2], 0), (int(self.pos.x), int(self.pos.y)),

self.size)

def decay(self): # random decay of the particles

if 50 > self.life > 10: # early stage their is a small chance of decay

ran = randint(0, 30)

if ran == 0:

self.remove = True

elif self.life > 50:

ran = randint(0, 5)

if ran == 0:

self.remove = True

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值