用 Python 實現(xiàn)帶音樂的雪花飄落雪景圖

文 |?野客
來源:Python 技術(shù)「ID: pythonall」

這幾天很多地方陸續(xù)出現(xiàn)了降雪的天氣,對于年內(nèi)的第一場雪,大家的熱情顯然是比較高漲的,比如很多人頂著雪花到各種景點打卡,再比如一位東北大哥要直播賣雪送辣白菜給南方人。

此事還上了微博熱搜,博主唐僧評論:“對賣家來說是買辣白菜送雪,對南方人來說是買雪送辣白菜”,網(wǎng)友 melodyming2 回復(fù):“圣僧我悟了”,大家如果有興趣的話,可以到網(wǎng)上看一下詳細(xì)報道,這里就不多說了。

回到正題,本文我們使用 Python 來實現(xiàn)帶音樂的雪花飄落雪景圖,功能實現(xiàn)用到的 Python 庫為 pygame,之前已經(jīng)多次介紹了,相信大家應(yīng)該都比較熟悉了。
實現(xiàn)
雪景圖的實現(xiàn)還是比較簡單的,基本思路如下:
找一張自己喜歡的圖片作為背景圖
添加雪飛飄落效果
添加音樂效果
首先,我們來生成主窗口及設(shè)置背景圖,代碼實現(xiàn)如下:
bg_img?=?"bg.jpeg"
bg_size?=?(900,?500)
screen?=?pygame.display.set_mode(bg_size)
pygame.display.set_caption("雪景圖")
bg?=?pygame.image.load(bg_img)
窗口的寬、高根據(jù)背景的尺寸來設(shè)置。
接著我們來實現(xiàn)雪花飄落效果,先來定義一個雪花列表,代碼實現(xiàn)如下:
snow_list?=?[]
for?i?in?range(150):
????x_site?=?random.randrange(0,?bg_size[0])???#?雪花圓心位置
????y_site?=?random.randrange(0,?bg_size[1])???#?雪花圓心位置
????X_shift?=?random.randint(-1,?1)?????????#?x?軸偏移量
????radius?=?random.randint(4,?6)???????????#?半徑和?y?周下降量
????snow_list.append([x_site,?y_site,?X_shift,?radius])
再來實現(xiàn)雪花位置更新,實現(xiàn)動態(tài)下雪的效果,代碼實現(xiàn)如下:
for?i?in?range(len(snow_list)):
?#?繪制雪花,顏色、位置、大小
?pygame.draw.circle(screen,?(255,?255,?255),?snow_list[i][:2],?snow_list[i][3]?-?3)
?#?移動雪花位置(下一次循環(huán)起效)
?snow_list[i][0]?+=?snow_list[i][2]
?snow_list[i][1]?+=?snow_list[i][3]
?#?如果雪花落出屏幕,重設(shè)位置
?if?snow_list[i][1]?>?bg_size[1]:
??snow_list[i][1]?=?random.randrange(-50,?-10)
??snow_list[i][0]?=?random.randrange(0,?bg_size[0])
因為我們要實現(xiàn)的是雪花不斷飄落的效果,因此再來設(shè)置一個循環(huán)來不斷刷新屏幕,代碼實現(xiàn)如下:
while?not?done:
????#?消息事件循環(huán),判斷退出
????for?event?in?pygame.event.get():
????????if?event.type?==?pygame.QUIT:
????????????done?=?True
????screen.blit(bg,?(0,?0))
????#?雪花列表循環(huán)
????for?i?in?range(len(snow_list)):
????????#?繪制雪花,顏色、位置、大小
????????pygame.draw.circle(screen,?(255,?255,?255),?snow_list[i][:2],?snow_list[i][3]?-?3)
????????#?移動雪花位置(下一次循環(huán)起效)
????????snow_list[i][0]?+=?snow_list[i][2]
????????snow_list[i][1]?+=?snow_list[i][3]
????????#?如果雪花落出屏幕,重設(shè)位置
????????if?snow_list[i][1]?>?bg_size[1]:
????????????snow_list[i][1]?=?random.randrange(-50,?-10)
????????????snow_list[i][0]?=?random.randrange(0,?bg_size[0])
????#?刷新屏幕
????pygame.display.flip()
????clock.tick(20)
最后,我們再來為雪景圖添加一段音樂效果,代碼實現(xiàn)如下:
track?=?pygame.mixer.music.load('my.mp3')??#?加載音樂文件
pygame.mixer.music.play()?#?播放音樂流
pygame.mixer.music.fadeout(100000)??#?設(shè)置音樂結(jié)束時間
到此我們就完成了雪景圖的繪制工作了,下面一起來欣賞一下 GIF 效果:

大家如果想看(聽)帶音樂的雪景圖,可以自己運行程序感受一下,這里就不給大家錄視頻了。
總結(jié)
本文我們給大家介紹了用 Python 制作帶音樂的雪花飄落雪景圖的一種實現(xiàn)方式,大家如果感興趣的話,可以自己動手試一下。
PS:公號內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計劃!
老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點一下,如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!


【代碼獲取方式】
