用Python製做煙花python
(星空圖片)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)
你們知道,燃放煙花是從點燃炮竹開始的,當炮竹上升到必定的高度後,引擎被點燃,而後煙花會被炸裂出來。因此接下來,咱們要繪製炮竹。咱們的炮竹形狀計劃就採用長方形,這種形狀正好能夠採用畫筆的形狀‘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
接下來開始說重點,來介紹一下如何製做煙花。製做煙花是本文的重點。編輯器
由上圖容易看出,煙花其實能夠當作由一些形狀類似的圖形彙集在一塊兒構成的。其原理是,首先將形狀類似的同類圖形彙集在一塊兒,而後,短期內向四周炸開。據此,咱們也採用相似的方法。與以上炮竹的製做相似,咱們這裏也利用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 青少年編程(gh_73f62b58c679)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。