过大年,用Python去绽开最绚丽的烟花


今天是大年初二,过年了,小编在这里给你们拜年了,祝你们在新的一年里大吉大利、身体健康,阖家欢乐、万事如意!


今年春节很特殊,我想你们都是宅在家里过的大年。做为一个“Python发烧友”,固然不能浪费时间,小编计划利用这段时间来闭关修炼,时刻吸收“Python精华”,争取在技术上取得更大的进步。

今天,分享的仍然是Python海龟库的知识,正值新年,又不能放烟花,所以,小编决定用Python来仿制烟花,经过这种方式来过一过“年瘾”!




用Python制做烟花python




准备好了吗,咱们开始动手吧! 用Python的海龟库(turtle库)制做烟 花的过程大体以下。

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

制做夜空,其实就是设置画布。你们知道,夜晚的天空月明如水,星光攒动,绚丽至极。若是把全部的夜空景象都用turtle库绘制出来确实很是的费时、费力。并且,绘制月亮、繁星这些景色自己也不是咱们本篇文章的终点。所以,在夜空制做这一块,咱们讨了个巧,是选用背景图片来实现的,以下图。

(星空图片)web


(月亮图片)
编程


好了,照片选用完毕后,下面开始用代码来制做夜空,具体以下。
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)
运行后,效果以下图所示。


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)

注意,最后的代码
app

firecracker.shapesize(0.2,0.8)dom

是要对该‘square’形状在水平与垂直方向上进行拉伸。运行后,具体效果以下。


3.来制做烟花


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


由上图容易看出,烟花其实能够当作由一些形状类似的图形汇集在一块儿构成的。其原理是,首先将形状类似的同类图形汇集在一块儿,而后,短期内向四周炸开。据此,咱们也采用相似的方法。与以上炮竹的制做相似,咱们这里也利用turtle的画笔形状做为烟花的基本形状,代码以下。ide

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。
函数

好了,炮竹与烟花都有了,接下来,咱们计划让两者协同工做,即,首先让炮竹firecracker向上运行一段,当倒达必定高度后让烟花firworks汇集在一块儿,并短期炸开。具体代码以下。flex

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汇集在一块儿,而后向四周迅速炸开。运行效果以下。



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

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)

运行后结果以下。


好了,最后,小编录制了一段视频,让咱们在如下绽开烟花的视频下结束今天的文章。再次祝你们新年快乐,平平安安,大吉大利过大年!



-end-




Python 青少年编程





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

用Python , 带你透过杨辉三角形,发现数学之美

用Python自制多彩“探照灯”

图解 “圆周率”

掷掷骰,画画图!

红灯停,绿灯行!

Python海龟绘图系列---带你回到童年一块儿来玩“万花尺”

python海龟绘图系列----五彩斑斓写意画

带你一块儿来看那道美丽的彩虹

来,哥带你一块儿来玩质数螺旋

python海龟库(turtle)中颜色的表示方法

Python内置海龟(turtle)库绘图命令详解(二)

Python内置海龟(turtle)库绘图命令详解(一)

                                                                         





 





本文分享自微信公众号 - python 青少年编程(gh_73f62b58c679)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索