python人工降雪
本文參考了Ahab雜貨鋪微信公眾號,具體地址:https://mp.weixin.qq.com/s/fki-eGBzrSsz2xDbk--vpw
00.png
下面是我的源碼:
'''
人工降雪
Data:2018-12-09
Author:Lingyin
reference:https://mp.weixin.qq.com/s/fki-eGBzrSsz2xDbk--vpw
'''
import pygame
import random
import os
from pygame.locals import *
from pygame.compat import geterror
if not pygame.mixer: print('Warning, sound disabled')
SIZE = (1300,700)
main_dir = os.path.split(os.path.abspath(__file__))[0]
data_dir = os.path.join(main_dir, 'data')
#加載圖片,利用os模塊,實現跨平臺
def load_image(name):
fullname = os.path.join(data_dir,name)
try:
image = pygame.image.load(fullname)
except pygame.error as e:
raise e
image = image.convert()
return image
def load_sound(name):
class NoneSound:
def play(self): pass
if not pygame.mixer or not pygame.mixer.get_init():
return NoneSound()
fullname = os.path.join(data_dir, name)
print(fullname)
try:
pygame.mixer.music.load(fullname)
pygame.mixer.music.play()
except pygame.error:
print('Cannot load sound: %s' % fullname)
raise SystemExit(str(geterror()))
def Snow():
#定義一個雪花lsit
snow_list = []
for i in range(300):
x = random.randrange(0,SIZE[0])
y = random.randrange(0,SIZE[1])
x_speed = random.randint(-1,2)
y_speed = random.randint(3,8)
snow_list.append([x,y,x_speed,y_speed])
return snow_list
def main():
#初始化
pygame.init()
screen = pygame.display.set_mode(SIZE)
#設置標題
pygame.display.set_caption('唯美雪景')
#設置鼠標光標不可見
pygame.mouse.set_visible(0)
#加載背景
background = load_image('Lingyin0.jpg')
screen.blit(background,(0,0))
#顯示背景
pygame.display.flip()
clock = pygame.time.Clock()
snow = Snow()
load_sound('flower.mp3')
#主循環
going = True
while going:
clock.tick(20)
for event in pygame.event.get():
if event.type == QUIT:
going = False
elif event.type == KEYDOWN and event.key == K_ESCAPE:
going = False
for i in range(len(snow)):
#繪制雪花
pygame.draw.circle(screen,(255,255,255),snow[i][:2],snow[i][3])
#移動雪花
snow[i][0] += snow[i][2]
snow[i][1] += snow[i][3]
if snow[i][1] > SIZE[1]:
snow[i][1] = random.randrange(-50,-10)
snow[i][0] = random.randrange(0,SIZE[0])
pygame.display.flip()
screen.blit(background, (0, 0))
pygame.quit()
if __name__ == '__main__':
main()
在Ahab原有的基礎上,我增加了兩個用來加載圖片和聲音的函數,同時導入os模塊,實現跨平臺的應用。具體的原理,我就不講了,想知道的話,可以去原作者的微信公眾號去看,再次貼一下地址