程式設計師式浪漫:Python 帶你看雪啦!

2020-12-03 CSDN

暖爐溫酒配羊湯——今年冬至,你看雪了嗎?

作者 | Ahab

責編 | 仲培藝

前段時間筆者寫了一篇題為《用 Python 來一場人工造雪》的文章,但大家似乎都不滿足僅僅是一個圖片的雪花,都想來一場動態的人工降雪。於是便有了下面的內容:

具體介紹

動態版的實現主要是依靠 pygame 這個模塊,從繪製到實現動態移動,最初的想法是按照飛機大戰的思路把飛機替換成上次繪製的科赫雪花,自己試了試效果很差就是一張張圖片在屏幕上亂飛,通過百度發現 pygame.draw 模塊,跟 turtle 差不多。當然還是少不了 random,自己做過的 Python 面試題【BAT版】(02)中 random 算是常客,學習的時候覺得就是一個隨機數生成而已,最近慢慢接觸才發現 randmo 的強大,怪不得成為公司面試的必考題。

代碼實現

因為使用 pygame 第一步要做的就是初始化:

1import pygame2import random3#初始化4pygame.init()

加載背景圖同時根據背景圖的大小設置屏幕長寬:

1SIZE = (1000, 500)2screen = pygame.display.set_mode(SIZE)3pygame.display.set_caption("下雪了")4#加載位圖5background = pygame.image.load('snow.jpg')

接下來我們要定義一個雪花列表,且初始化雪花,這裡需要使用 random 隨機數設置 xy 軸的坐標和速度。

random.randrange

random.randrange([start],stop[, step]):從指定範圍內,按指定基數遞增的集合中獲取一個隨機數。

random.randint(a,b):用於生成一個指定範圍內的整數。其中參數a是下限,參數b是上限,生成的隨機數n:a<=n<=b。

1# 定義一個雪花列表2snow = []3# 初始化雪花4for i in range(300):5 x = random.randrange(0, SIZE[0])6 y = random.randrange(0, SIZE[1])7 speedx = random.randint(-1, 2)8 speedy = random.randint(3,8)9 snow.append([x, y, speedx, speedy])

做過飛機大戰或者熟悉pygame的朋友應該知道接下來要做的就是設置遊戲循環,同時還將之前加載的背景圖進行了繪製。

Surface對象有一個名為blit()的方法,它可以繪製位圖

screen.blit(space, (0,0))

第一個參數是加載完成的位圖,第二個參數是繪製的起始坐標。

1done = False2whilenot done:3# 消息事件循環,判斷退出4for event in pygame.event.get():5if event.type == pygame.QUIT:6 done = True7#繪製位圖8 screen.blit(background, (0,0))

這一步是最重要的繪製雪花和設置雪花列表的循環。

繪製雪花使用的是pygame.draw 模塊,此模塊用於在Surface上繪製一些簡單的圖形,比如點、直線、矩形、圓、弧等。我們繪製雪花用到的是:

pygame.draw.circle

原型:pygame.draw.circle(Surface, color, pos, radius, width=0): return Rect

用途:用於繪製圓形。第三個參數pos是圓心的位置坐標,radius指定了圓的半徑。

width參數表示線條(畫筆)的寬度,如果該值設置為0,則表示填充整個圖形,我們的繪製的雪花就是使用填充白色。顏色參數通常是一個RGB三元組(R, G, B)。

雪花列表循環主要取決於雪花列表的長度,同樣設置了移動雪花的位置,程序中還做了一個判定雪花從頂端向下移動時如果落出屏幕,將會重設位置。

1# 雪花列表循環 2for i in range(len(snow)): 3# 繪製雪花,顏色、位置、大小 4 pygame.draw.circle(screen, (255, 255, 255), snow[i][:2], snow[i][3]) 5 6# 移動雪花位置(下一次循環起效) 7 snow[i][0] += snow[i][2] 8 snow[i][1] += snow[i][3] 910# 如果雪花落出屏幕,重設位置11if snow[i][1] > SIZE[1]:12 snow[i][1] = random.randrange(-50, -10)13 snow[i][0] = random.randrange(0, SIZE[0])

到這程序基本就寫完了,只需要添加刷新屏幕的時間和遊戲退出語句就完事了。

1 pygame.display.flip()2 clock.tick(20)34pygame.quit()

最後感謝【唐僧不愛八戒】提供 pygame.draw 這個思路

熱 文 推 薦

這才是程式設計師春運搶票的正確姿勢!

求求你,下次面試別再問我什麼是 Spring AOP 和代理了!

Facebook 真的「非死不可」嗎?

劉強東無罪!

漫畫:為什麼網際網路人收入高,卻這麼低調

從比特幣披薩到區塊鏈衛星,程式設計師真會玩兒!

中國程式設計師開發的神奇網站:變量命名神器!

霸氣!女程媛徵男友的需求說明書!

print_r('點個好看吧!');var_dump('點個好看吧!');NSLog(@"點個好看吧!");System.out.println("點個好看吧!");console.log("點個好看吧!");print("點個好看吧!");printf("點個好看吧!\n");cout << "點個好看吧!" << endl;Console.WriteLine("點個好看吧!");fmt.Println("點個好看吧!");Response.Write("點個好看吧!");alert("點個好看吧!")echo "點個好看吧!"

相關焦點

  • Python程式設計師最常犯的10個錯誤,你中招了嗎?
    但是,lst += [5]語句是對lst變量自身進行的賦值操作(此時變量lst的作用域是函數foo2),但是在函數foo2中還未聲明該變量,所以就報錯啦!if not odd(n)] # ahh, the beauty of it all>>> numbers[0, 2, 4, 6, 8]更多有關列表解析式的詳細內容,請戳:https://docs.python.org/2/tutorial/datastructures.html#tut-listcomps常見錯誤
  • 好程式設計師Python培訓分享numpy簡介
    好程式設計師Python培訓分享numpy簡介:一、numpy簡介:NumPy是一個功能強大的Python庫,主要用於對多維數組執行計算。NumPy這個詞來源於兩個單詞-- Numerical和Python。NumPy提供了大量的庫函數和操作,可以幫助程式設計師輕鬆地進行數值計算。
  • Python已是曇花一現,但你卻還在堅持嗎?看看他們的理由
    Python已是曇花一現,你為什麼還在堅持呢?Python,是一門最適合人工智慧的程式語言,並且,這門語言十分適合新手學習,正因為如此,讓發展了近三十年的python,在最近幾年火爆全網。可為什麼說python已是曇花一現呢?因為有人找不到工作。
  • 螢火蟲洞之旅帶你走入童話的浪漫星空
    冬日裡不可錯過的火熱之旅當你從從山上步道入口綿延緩緩走下,接近黑暗的天色,路邊的雨林植物中布滿了密密麻麻的藍綠色的小燈光。一點一點亮晶晶的就布滿了整個洞穴。這個就是有著神奇之美的螢火蟲啦。如果你受夠了和男票看電影,吃飯,在看電影的無聊日程,帶他來螢火蟲洞吧,這個將會是最浪漫的約會聖地。感情一定up,up,up
  • 如果不懂Numpy,請別說自己是Python程式設計師
    在那之前,我一直覺得自己是一個合(you)格(xiu)的 python 程式設計師,似乎無所不能。但磁層頂模型的顯示效果令我沮喪——儘管這個模型只有十幾萬個頂點,拖拽、縮放卻非常卡頓。最終,我把頂點數量刪減到兩萬左右,以兼顧模型質量和響應速度,才勉強交付了這個任務。從此我開始懷疑 python 的性能,甚至一度懷疑 python 是否還是我的首選工具。
  • 「我想要帶你去浪漫的土耳其」,土耳其的浪漫你了解多少?
    大家好,愛旅行、愛攝影、愛記錄生活的可可可愛小天使又和大家見面啦~不少人對土耳其的了解只是停留在這句「我想要帶你去浪漫的土耳其」歌詞的認知上,那麼土耳其究竟浪漫在哪裡?為什麼好多人都嚮往去土耳其旅遊呢?可可今天就帶你來揭秘一下!
  • 4種方法告訴你!天津0基礎如何學python培訓?
    天津Python培訓 小夥伴們,今天小築又來啦!小夥伴們應該都知道豆瓣網吧,這個真的很強大了,我們一般看的電影評分較高的就會是優zhi電影,這其中豆瓣可是貢獻了不少,看來是有很多小夥伴都很相信豆瓣的評分的,但小夥伴們知道豆瓣是被什麼開發出來的嗎?就是我們的python程式設計師,python可以用來做很多事情,比如:網絡爬蟲、數據分析等。
  • 《Python程式設計師面試算法寶典》PDF超清版開源了文末附下載方式
    全面介紹Python程式設計師面試筆試技巧和方法,教你如何以「不變應萬變」。√ 兩萬多行代碼,100多個知識點,全面覆蓋Python程式設計師各類面試題型。√ 15年開發經驗、實戰技巧總結,站在「巨人」的肩膀上,讓學習走捷徑。
  • 不懂NumPy 算什麼 Python 程式設計師?|CSDN 博文精選
    有了 NumPy,Python 程式設計師才有可能寫出媲美 C 語言運行速度的代碼。熟悉 NumPy,才能學會使用 PyOpenGL / PyOpenCV / Pandas / Matplotlib 等數據處理及可視化的模塊。
  • 「帶你去浪漫的土耳其」……土耳其真很的浪漫嗎
    不知道為什麼,「土耳其」總是出現在我們的歌單裡,從周傳雄的「憂鬱藍色土耳其」到周杰倫的「土耳其冰淇淋」以及抖音神曲「帶你去旅行」……在百度上搜索,帶有「土耳其」的歌不下百首;而經常和土耳其對應的那個詞居然是「浪漫」、「神秘」?
  • 【開講啦】產品經理和程式設計師的那些「恩怨情仇」(附PPT下載)
    第一點,產品經理不尊重技術規則,程式設計師不尊重產品經理的創作用心這方面可以總結的例子很多,舉一個極端的例子:程式設計師調了一天的bug,產品經理過來看了看,直接就說一句:「今天什麼都沒改嘛」,甚至有的產品經理就可能說出這個程式設計師「很懶」的話來。
  • 資深程式設計師大佬告訴你,如何成為一個C++高級程式設計師
    現在 C++ 的使用範圍比以前已經少了很多,java、C#、python 等語言在很多方面已經可以代替C++。但是也有很多地方是其他語言完全無法替代的,主要集中在需要運行效率比較高的行業,比如遊戲、高效的伺服器。現在學習 java、C#等語言的人數遠遠高於C++,主要是 C++ 的入門門檻太高,可能學習了一段時間後還做不了什麼東西,導致信心大受打擊,進而放棄。
  • Python 拓展之推導式
    print(i,j)... 171827283738如果是上面這個例子,你該怎麼用列表推導式呢?字典推導式除了列表,字典其實也有自己的推導式,它和列表推導式其實有些相似,也有 if 條件判斷以及多個 for 循環的迭代語句,下面舉個最簡單的例子:>>> words = 'rocky like python'>>> letter_cnt = {letter:words.count
  • 推薦|劉國均:雪的浪漫·散文詩
    >(一)在雪中感受一份浪漫,在雪中傾聽一份感悟,聽雪,也聽心。(二)靜雪飛舞,像銀一樣白,像玉一樣盈。喜歡雪,因為只有冬天才會有雪,因為有雪才會讓我們有一場不期而遇的邂逅。(三)喜歡雪,是因為雪有一顆素雅的心,不描紅裝,不思粉黛,如同我心中的你,裙袂飄飄,把我的世界裝扮得銀裝素裹。(四)悠然飄落的雪花很輕盈,也很浪漫,有一觸即融的溫柔,這就像是我對你的呵護。
  • 學習Python對辦公真的有用嗎?用經驗告訴你答案
    Python究竟適不適合辦公人士來學習,以及學了之後究竟能不能給我的工作來帶質一般的飛躍?目前我在做兼職文案,以我的親身經歷為例,我可以很負責的告訴大家,學習python確實可以在某些方面提升你的工作效率,但是,並不是每個人都適合去學習它。
  • 人生苦短,我用Python,那麼問題來了,普通人要學python嗎?
    話說在金融和IT行當混跡了多年,python一直是被我隨手拿來當個小工具用用,有時候偷懶用python弄個excel自動化整理工具,有時候拿來上各種網站爬蟲搜集點信息,有時候也會拿來寫點量化小工具。那麼到底什麼是python?
  • 如何自學成 Python 大神?這裡有些建議
    如果你真的想要高效地學習 Python,那就需要掌握如何過濾網上的垃圾教程資源的技能,並從其他有經驗的程式設計師或在線編程社區中獲得幫助。倘若你沒有任何編程知識,或者知之甚少,從一張白紙起步,或許會更容易一些。
  • 三問Python:能幹什麼?為什麼火?會繼續火嗎?
    java的就業,從每年的校招就可以看出來的,自己努力也是可以找到一份不錯的工作的。但python的就業呢?自己就還沒了解清楚了。秋招的時候 Python 的崗位確實不多,尤其是像 BAT 這樣的一線公司,基本上 Python 崗位都是運維開發和測試開發。
  • Python趣味打怪:60秒學會一個例子,147段代碼助你從入門到大師
    不要害怕學習的過程枯燥無味,這裡有程式設計師jackzhenguo打造的一份中文Python「糖果包」:147個代碼小樣,60秒一口,營養又好玩,從Python基礎到機器學習盡皆囊括。其中,有常用知識的總結,隨查隨用:從正則化起手式到簡單爬蟲的實現,也都一步步用代碼鋪開:△urllib為內置模塊,推薦第三方庫requests當然啦,學習Python,怎麼能忽略三大利器:迭代器
  • 寫Python 代碼不可不知的函數式編程技術
    選自 Medium作者:Raivat Shah參與:魔王、Jamin本文對 Python 中的函數式編程技術進行了簡單的入門介紹。近來,越來越多人使用函數式編程(functional programming)。因此,很多傳統的命令式語言(如 Java 和 Python)開始支持函數式編程技術。