過大年,用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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索