Advertisement

python制作烟花特效_过大年,用Python去绽放最绚丽的烟花

阅读量:

目前日期为农历初二,在这个特殊的日子里向大家问好。春节将至,请允许作为小编的我在这向大家问好。愿大家新春快乐、身体健康、阖家幸福、事事顺心!

2d4fd61c-9309-4318-8ef5-4a8788e0d6a1.jpg

今年的春节确实非常特别。大家都选择呆在家里过大年。作为一个狂热爱好者,我自然不能荒废时间。我打算这段时间用来潜心修炼,并时常研读《Python精华》,努力提升自己的技术水平。

1bacc496-56b0-4b4b-ac86-c35363f01941.jpg

今天依然是分享Python海龟库知识的好机会。恰逢新春佳节之际,在无法燃放烟花爆竹的情况下(或者:又不能燃放烟花爆竹),因此利用Python编程技术模拟烟花效果成为了必要的选择。体验一下"year fix"的乐趣!

415134ff-1229-472c-8bdf-f68345a32bc4.jpg

用Python制作烟花

准备好了吗,我们开始动手吧!

用Python的海龟库(turtle库)制作烟

花的过程大致如下。

1.首先制作一个绚丽的夜空

制作夜空的过程本质上就是搭建画布的基础

a063d539-9fa3-4564-a399-a9a15865d9b7.png

(星空图片)

ec04a1eb-7010-4f69-8615-77932e45beb6.png

(月亮图片)

好了,照片选用完毕后,下面开始用代码来制作夜空,具体如下。

import turtle

wn=turtle.Screen()

wn.colormode(255)

wn.bgpic('星光back.gif')

wn.setup(1920,1080)

wn.register_shape('月亮.gif')

wn.register_shape('星光.gif')

wn.register_shape('liuxing.gif')

#月亮

moon=turtle.Turtle()

moon.shape('月亮.gif')

moon.shapesize(0.2,0.2)

moon.up()

moon.goto(-400,250)

运行后,效果如下图所示。

86cb12c8-e073-47d5-8ec0-454253ede12c.png

2.接下来制作一个炮竹

众所周知,在进行燃放烟花活动时,默认是从点燃火药引燃炮竹开始的。由点燃火药引燃炮竹后,在其上升至预定高度时会触发引信被点燃的过程,并随后会爆炸产生烟花效果。因此我们需要根据这个过程来绘制相应的图形元素——我们的炮竹形状方案就采用长方形这一设定——这种形状正好可以采用画笔的图形类型为' square'来表示。具体代码如下:

#炮竹

firecracker=turtle.Turtle()

firecracker.up()

firecracker.goto(0,-200)

firecracker.lt(90)

firecracker.speed('fastest')

firecracker.color('white')

firecracker.shape('square')

firecracker.shapesize(0.2,0.8)

注意,最后的代码

firecracker.shapesize(0.2,0.8)

该‘square’形状将被横向和纵向进行拉伸。运行后, 具体效果如下

20365126-03f2-4960-8099-434251195fa4.png

3.来制作烟花

接下来开始说重点,来介绍一下如何制作烟花。制作烟花是本文的重点。

4371ac12-ecc1-4754-b63b-ba587616775a.jpg

从上图可以看出, 烟花本质上是由一系列形态相近的图案聚合成群而形成的. 其基本原理是, 首先将形态相近的同类图案聚合成群, 然后, 在短暂的时间内向四周展开爆炸. 依据这一规律, 我们在此基础上采用了类似的策略. 与以上炮竹制作类似地, 在本项目中我们同样利用turtle画笔作为基本形状.

firworks=[]

shape=['circle','classic','square','triangle','arrow','turtle']

for i in range(25):

newfirework=turtle.Turtle()

newfirework.speed('fastest')

newfirework.up()

newfirework.ht()

newfirework.shape('circle')

newfirework.shapesize(0.5,2.5)

firworks.append(newfirework)

明显可以看出,在上述代码中将烟花作为Python中的一个形状一致的画笔列表 firworks 来定义。

现在打算让两者协同运转,在达到设定高度时先启动火药枪管上升一段时间。随后将烟花聚集在一起,并使其瞬间爆炸。具体代码如下

while True:

high=200

wn.update()

firecracker.fd(10)

for firework in firworks:

firework.fd(60)

if firecracker.ycor()==high:

color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

for firework in firworks:

firework.color(color)

firework.goto(firecracker.xcor(),firecracker.ycor())

firework.seth(random.randint(0, 360))

firework.showturtle()

if firecracker.ycor() >= high+5:

firecracker.goto(0,-200)

time.sleep(0.05)

此代码为一个无限循环程序,在每次循环开始时,首先让点燃的火药筒(firecracker)上升一段距离。当达到预定高度后将烟花(firework)聚拢在一起随后迅速向四周展开爆炸过程。运行效果如下:

ae2a57a7-807d-4a93-905c-fb7c205a1cb1.gif

接下来,调整以上代码,加入函数

def set_firworks_shape(apperance):

for firework in firworks:

firework.shape(apperance)

,让烟花的形状随机发生变化,并加入以下代码

firecracker.goto(random.randint(0, 500),-200)

让烟花每次炸完后将炮竹随机换位置。

while True:

high=200

wn.update()

firecracker.fd(10)

for firework in firworks:

firework.fd(60)

if firecracker.ycor()==high:

color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

for firework in firworks:

firework.color(color)

firework.goto(firecracker.xcor(),firecracker.ycor())

firework.seth(random.randint(0, 360))

firework.showturtle()

if firecracker.ycor() >= high+5:

firecracker.goto(random.randint(0, 500),-200)

set_firworks_shape(random.choice(shape))

time.sleep(0.05)

运行后结果如下。

52ed30c7-47ab-4b8e-a1cd-a14c76c704d6.gif

至此,在下面这则绽放烟花的视频为背景来结束今天的文章。小编拍摄了一段短视频作为结尾素材。也再次祝愿大家新春佳节愉快,并且愿大家新的一年里平平安安、万事如意!

-end-

d5af82f0-f835-433d-a24f-e72de46abd94.jpg

Python 青少年编程

python海龟作图系列推荐阅读:

702e2e96-b9a6-450f-bf49-415e59df235c.gif

全部评论 (0)

还没有任何评论哟~