1. 程式人生 > >用Python實現人工造雪,誰說程式設計師不懂浪漫!

用Python實現人工造雪,誰說程式設計師不懂浪漫!

 

 

 

 

 

 

 

 

 
1import pygame 2import random 3#初始化 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 = False 2while not done: 3 # 訊息事件迴圈,判斷退出 4 for event in pygame.event.get(): 5 if event.type == pygame.QUIT: 6 done = True 7 #繪製點陣圖 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 # 雪花列表迴圈 2 for 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] 9 10 # 如果雪花落出螢幕,重設位置 11 if 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) 3 4pygame.quit()