Python人工造雪2.0(動(dòng)態(tài)版)

寫在前面

今天的的更文應(yīng)該是LeetCode刷題程奠,文章都已經(jīng)寫完了,但是今天中午小伙伴們?cè)谖业慕涣魅豪镉懻撉皫滋斓奈恼?a target="_blank" rel="nofollow">用Python來(lái)一場(chǎng)人工造雪,大家都不滿足僅僅是一個(gè)圖片的雪花,都想來(lái)一場(chǎng)動(dòng)態(tài)的人工降雪。自己這兩天也一直在思考如何實(shí)現(xiàn)動(dòng)態(tài)的雪花网沾,中午看著窗外飄起的雪花突然想到自己之前做過(guò)的python實(shí)戰(zhàn)用Python優(yōu)雅的打飛機(jī)癞蚕,這個(gè)游戲里的所有對(duì)象都是動(dòng)態(tài)的,只需要把里面的飛機(jī)換成雪花就可以了辉哥。

具體介紹

動(dòng)態(tài)版的實(shí)現(xiàn)主要是依靠pygame這個(gè)模塊桦山,從繪制到實(shí)現(xiàn)動(dòng)態(tài)移動(dòng),最初的想法是按照飛機(jī)大戰(zhàn)的思路把飛機(jī)替換成上次繪制的科赫雪花醋旦,自己試了試效果很差就是一張張圖片在屏幕上亂飛恒水,通過(guò)百度發(fā)現(xiàn)pygame.draw模塊,跟turtle差不多饲齐。當(dāng)然還是少不了random钉凌,自己做過(guò)的python面試題Python面試題【BAT版】(02)中random算是常客捂人,學(xué)習(xí)的時(shí)候覺得就是一個(gè)隨機(jī)數(shù)生成而已御雕,最近慢慢接觸才發(fā)現(xiàn)randmo的強(qiáng)大,怪不得成為公司面試的必考題滥搭,周末會(huì)好好研究一下random酸纲,寫篇文章給大家講講我理解的random。 代碼實(shí)現(xiàn) 因?yàn)槭褂胮ygame第一步要做的就是初始化

1import pygame
2import random
3#初始化4pygame.init()

加載背景圖同時(shí)根據(jù)背景圖的大小設(shè)置屏幕長(zhǎng)寬

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

接下來(lái)我們要定義一個(gè)雪花列表瑟匆,且初始化雪花闽坡,這里需要使用random隨機(jī)數(shù)設(shè)置xy軸的坐標(biāo)和速度。
random.randrange
random.randrange([start],stop[, step]):從指定范圍內(nèi),按指定基數(shù)遞增的集合中獲取一個(gè)隨機(jī)數(shù)疾嗅。
random.randint(a,b):用于生成一個(gè)指定范圍內(nèi)的整數(shù)外厂。其中參數(shù)a是下限,參數(shù)b是上限宪迟,生成的隨機(jī)數(shù)n:a<=n<=b酣衷。

1# 定義一個(gè)雪花列表
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])

做過(guò)飛機(jī)大戰(zhàn)或者熟悉pygame的朋友應(yīng)該知道接下來(lái)要做的就是設(shè)置游戲循環(huán),同時(shí)還將之前加載的背景圖進(jìn)行了繪制次泽。
Surface對(duì)象有一個(gè)名為blit()的方法穿仪,它可以繪制位圖
screen.blit(space, (0,0))
第一個(gè)參數(shù)是加載完成的位圖,第二個(gè)參數(shù)是繪制的起始坐標(biāo)意荤。

1done = False
2while not done:
3    # 消息事件循環(huán)啊片,判斷退出
4    for event in pygame.event.get():
5        if event.type == pygame.QUIT:
6            done = True
7    #繪制位圖
8    screen.blit(background, (0,0))

這一步是最重要的繪制雪花和設(shè)置雪花列表的循環(huán)。
繪制雪花使用的是pygame.draw 模塊玖像,此模塊用于在Surface上繪制一些簡(jiǎn)單的圖形紫谷,比如點(diǎn)、直線捐寥、矩形笤昨、圓、弧等握恳。我們繪制雪花用到的是:
pygame.draw.circle
  原型:pygame.draw.circle(Surface, color, pos, radius, width=0): return Rect
  用途:用于繪制圓形瞒窒。第三個(gè)參數(shù)pos是圓心的位置坐標(biāo),radius指定了圓的半徑乡洼。
width參數(shù)表示線條(畫筆)的寬度崇裁,如果該值設(shè)置為0,則表示填充整個(gè)圖形束昵,我們的繪制的雪花就是使用填充白色拔稳。顏色參數(shù)通常是一個(gè)RGB三元組(R, G, B)。
雪花列表循環(huán)主要取決于雪花列表的長(zhǎng)度锹雏,同樣設(shè)置了移動(dòng)雪花的位置巴比,程序中還做了一個(gè)判定雪花從頂端向下移動(dòng)時(shí)如果落出屏幕,將會(huì)重設(shè)位置礁遵。

 1 # 雪花列表循環(huán) 
2    for i in range(len(snow)): 
3        # 繪制雪花匿辩,顏色、位置榛丢、大小 
4        pygame.draw.circle(screen, (255, 255, 255), snow[i][:2], snow[i][3])  
6        # 移動(dòng)雪花位置(下一次循環(huán)起效)
 7        snow[i][0] += snow[i][2]
 8        snow[i][1] += snow[i][3] 
9
10        # 如果雪花落出屏幕铲球,重設(shè)位置
11        if snow[i][1] > SIZE[1]:
12            snow[i][1] = random.randrange(-50, -10)
13            snow[i][0] = random.randrange(0, SIZE[0])

到這程序基本就寫完了,只需要添加刷新屏幕的時(shí)間和游戲退出語(yǔ)句就完事了晰赞。

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

圖片.png

【推薦閱讀】

機(jī)器學(xué)習(xí)實(shí)戰(zhàn)--住房月租金預(yù)測(cè)(1)

【LeetCode】匯總貼(NO.1-20)

Python之禪

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稼病,一起剝皮案震驚了整個(gè)濱河市选侨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌然走,老刑警劉巖援制,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異芍瑞,居然都是意外死亡晨仑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拆檬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)洪己,“玉大人,你說(shuō)我怎么就攤上這事竟贯〈鸩叮” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵屑那,是天一觀的道長(zhǎng)拱镐。 經(jīng)常有香客問(wèn)我,道長(zhǎng)持际,這世上最難降的妖魔是什么沃琅? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蜘欲,結(jié)果婚禮上益眉,老公的妹妹穿的比我還像新娘。我一直安慰自己芒填,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布空繁。 她就那樣靜靜地躺著殿衰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盛泡。 梳的紋絲不亂的頭發(fā)上闷祥,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音傲诵,去河邊找鬼凯砍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拴竹,可吹牛的內(nèi)容都是我干的悟衩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栓拜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼座泳!你這毒婦竟也來(lái)了惠昔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挑势,失蹤者是張志新(化名)和其女友劉穎镇防,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體潮饱,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡来氧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了香拉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啦扬。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缕溉,靈堂內(nèi)的尸體忽然破棺而出考传,到底是詐尸還是另有隱情,我是刑警寧澤证鸥,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布僚楞,位于F島的核電站,受9級(jí)特大地震影響枉层,放射性物質(zhì)發(fā)生泄漏泉褐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一鸟蜡、第九天 我趴在偏房一處隱蔽的房頂上張望膜赃。 院中可真熱鬧,春花似錦揉忘、人聲如沸跳座。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疲眷。三九已至,卻和暖如春您朽,著一層夾襖步出監(jiān)牢的瞬間狂丝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工哗总, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留几颜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓讯屈,卻偏偏與公主長(zhǎng)得像蛋哭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涮母,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容