亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

Python趣味挑戰之pygame實現無敵好看的百葉窗動態效果

瀏覽:47日期:2022-06-18 08:18:12
目錄一、案例知識點概述二、準備工作三、核心功能模塊四、完整代碼五、運行效果一、案例知識點概述

(一)使用到的python庫

使用pygame庫、random庫和os、sys等系統庫。

其中:pygame庫實現主體功能,提供窗口界面顯示、動態效果展示等random庫實現隨機數的生成,通過隨機數實現動態百葉窗的上下左右選擇、百葉窗的數量選擇等功能。 os庫實現圖片資源的裝載和讀取。sys庫實現退出操作等。

(二) 整體實現邏輯

通過WIDTH = 600 和 HEIGHT = 600設置窗口的高度和寬度通過runimage 和 nextimage 設置當前顯示的圖像和下一張要顯示的圖像通過num_part = random.randint(3,8)來設置要顯示的百葉窗的數量通過num_list = []保存當前runimage拆分出來的百葉窗的surface資源,用于在百葉窗動態效果過程中顯示。通過choose來設置是上下運動還是左右運動。

二、準備工作

(一)實現pygame的主窗口

import pygame,syspygame.init()screen = pygame.display.set_mode((500, 500))pygame.display.set_caption(’大小框展示’)fcclock = pygame.time.Clock()while True: for event in pygame.event.get():if event.type == pygame.QUIT or event.type == pygame.K_F1: pygame.quit() sys.exit() fcclock.tick(60) pygame.display.flip() # 刷新窗口

黑黑的框,不截圖了。大家都懂。

(二)貼個圖顯示得好看點

import pygame,syspygame.init()screen = pygame.display.set_mode((500, 500))pygame.display.set_caption(’大小框展示’)fcclock = pygame.time.Clock()img = pygame.image.load(’./image/aerial-alpine-ceresole-reale-desktop-backgrounds-1562.jpg’).convert_alpha()img = pygame.transform.scale(img, (500, 500))while True: for event in pygame.event.get():if event.type == pygame.QUIT or event.type == pygame.K_F1: pygame.quit() sys.exit() screen.blit(img,(0,0)) fcclock.tick(60) pygame.display.flip() # 刷新窗口

Python趣味挑戰之pygame實現無敵好看的百葉窗動態效果

(三)圖片從哪里來

這里建議直接通過網絡上下載免費的、好看的圖片,并保存在指定的文件夾,用于過程中展現。

我認為有三種方法:

其一:使用爬蟲技術從網上下載圖片,可以開一個子線程負責采集網上圖片,然后加載到list列表中;其二:可以直接對電腦中所有的盤進行自動檢索,然后加載到list列表中; 其三:指定目錄,然后加載到list列表中;我這里偷個懶,選擇第三種方法實現。

具體實現代碼如下:

path = ’./image/’ files = [] dirs = os.listdir(path) for diretion in dirs:files.append(path + diretion)

(四)圖片裝載

我為什么在初始化的時候就進行裝載呢?

原因是:解決效率問題,無需每次使用時重復加載,而且在初始化的時候就適配屏幕大小進行圖片縮放。

因此,我把這個過程打包成一個函數,方便后續調用,而且參數傳遞為:屏幕的大小。然后返回bglist對象。

for file in files: picture = pygame.transform.scale(pygame.image.load(file), (1440, 900)) dSurface = picture # dSurface = pygame.image.load(file).convert() bglist.append(dSurface)

OK,圖片有了,窗口有了,那么就開始實現我們的業務邏輯吧。

三、核心功能模塊

(一)實現init_image函數初始化加載圖片到surface對象

def init_image(): path = ’./image/’ files = [] dirs = os.listdir(path) for diretion in dirs:files.append(path + diretion) for file in files:picture = pygame.transform.scale(pygame.image.load(file), (WIDTH, HEIGHT))dSurface = picture# dSurface = pygame.image.load(file).convert()bglist.append(dSurface)

(二)初始化相關變量

runimage = Nonenextimage = Noneflag = False # FALSE沒有切屏 TRUE 切屏flag2 = Falsechoose = 6num_part = random.randint(3,8) # 記錄分成多少塊矩形框num_list = []num_increse = 1inc = random.choice([-1,1])while num_increse<=num_part: inc = -inc num_list.append(inc) num_increse += 1

這里,建議大家思考一下為什么要引入變量flag和flag2

(三)每次百葉窗切換完之后重置

def reset(): global flag,runimage,nextimage,flag2,i,j,choose,num_part,num_list flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False choose = random.randint(6,7) if nextimage is None:nextimage = random.choice(bglist) if runimage is None:runimage = random.choice(bglist) else:runimage = nextimagenextimage = random.choice(bglist) num_part = random.randint(3,8) # 記錄分成多少塊矩形框 num_list = [] num_increse = 1 inc = random.choice([-1,1]) while num_increse <= num_part:inc = -incnum_list.append(inc)num_increse += 1

(四)實現百葉窗動態切換的run函數

def run(): global flag,runimage,flag2,nextimage,i,j,choose,num_part,num_list reset() while True:for event in pygame.event.get(): if event.type == pygame.QUIT or event.type == pygame.K_F1:pygame.quit()sys.exit() if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit()if event.key == pygame.K_SPACE: if flag is False:# FALSE沒有切屏 TRUE 切屏flag = Trueflag2 = Falsescreen.fill((255, 255, 255)) # 設置背景為白色if flag: if choose==6:select_rect = []kk = 0while kk < num_part: tmp_rect = pygame.Rect(kk * WIDTH/num_part,0,WIDTH/num_part,HEIGHT) select_rect.append(runimage.subsurface(tmp_rect).copy()) kk += 1screen.blit(nextimage, (0, 0))mm = 0for each in zip(select_rect,num_list): if each[1]==1:screen.blit(each[0], (i+mm*WIDTH/num_part, -j)) else:screen.blit(each[0], (i+mm*WIDTH/num_part, j)) mm += 1j += stepif j >= HEIGHT: flag2 = True elif choose==7:select_rect = []kk = 0while kk < num_part: tmp_rect = pygame.Rect(0,kk * HEIGHT/num_part,WIDTH,HEIGHT/num_part) select_rect.append(runimage.subsurface(tmp_rect).copy()) kk += 1screen.blit(nextimage, (0, 0))mm = 0for each in zip(select_rect,num_list): if each[1]==1:screen.blit(each[0], (-i, j+mm*HEIGHT/num_part)) else:screen.blit(each[0], (i, j+mm*HEIGHT/num_part)) mm += 1i += stepif i >= WIDTH: flag2 = Trueelse: screen.blit(nextimage, (0, 0)) screen.blit(runimage, (0, 0))if flag2: reset()fcclock.tick(fps)pygame.display.flip() # 刷新窗口

(五)主函數

if __name__ == ’__main__’: init_image() run()四、完整代碼

import sys, pygameimport osimport randompygame.init() # 初始化pygame類WIDTH = 600HEIGHT = 600screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 設置窗口大小pygame.display.set_caption(’美麗的屏保’) # 設置窗口標題tick = pygame.time.Clock()fps = 60 # 設置刷新率,數字越大刷新率越高fcclock = pygame.time.Clock()runimage = Nonenextimage = Noneflag = False # FALSE沒有切屏 TRUE 切屏flag2 = Falsechoose = 6num_part = random.randint(3,8) # 記錄分成多少塊矩形框num_list = []num_increse = 1inc = random.choice([-1,1])while num_increse<=num_part: inc = -inc num_list.append(inc) num_increse += 1def init_image(): path = ’./image/’ files = [] dirs = os.listdir(path) for diretion in dirs:files.append(path + diretion) for file in files:picture = pygame.transform.scale(pygame.image.load(file), (WIDTH, HEIGHT))dSurface = picturebglist.append(dSurface)def reset(): global flag,runimage,nextimage,flag2,i,j,choose,num_part,num_list flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False i = 0 j = 0 choose = random.randint(6,7) if nextimage is None:nextimage = random.choice(bglist) if runimage is None:runimage = random.choice(bglist) else:runimage = nextimagenextimage = random.choice(bglist) num_part = random.randint(3,8) # 記錄分成多少塊矩形框 num_list = [] num_increse = 1 inc = random.choice([-1,1]) while num_increse <= num_part:inc = -incnum_list.append(inc)num_increse += 1def run(): global flag,runimage,flag2,nextimage,i,j,choose,num_part,num_list reset() while True:for event in pygame.event.get(): if event.type == pygame.QUIT or event.type == pygame.K_F1:pygame.quit()sys.exit() if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit()if event.key == pygame.K_SPACE: if flag is False:# FALSE沒有切屏 TRUE 切屏flag = Trueflag2 = Falsescreen.fill((255, 255, 255)) # 設置背景為白色if flag: if choose==6:select_rect = []kk = 0while kk < num_part: tmp_rect = pygame.Rect(kk * WIDTH/num_part,0,WIDTH/num_part,HEIGHT) select_rect.append(runimage.subsurface(tmp_rect).copy()) kk += 1screen.blit(nextimage, (0, 0))mm = 0for each in zip(select_rect,num_list): if each[1]==1:screen.blit(each[0], (i+mm*WIDTH/num_part, -j)) else:screen.blit(each[0], (i+mm*WIDTH/num_part, j)) mm += 1j += stepif j >= HEIGHT: flag2 = True elif choose==7:select_rect = []kk = 0while kk < num_part: tmp_rect = pygame.Rect(0,kk * HEIGHT/num_part,WIDTH,HEIGHT/num_part) select_rect.append(runimage.subsurface(tmp_rect).copy()) kk += 1screen.blit(nextimage, (0, 0))mm = 0for each in zip(select_rect,num_list): if each[1]==1:screen.blit(each[0], (-i, j+mm*HEIGHT/num_part)) else:screen.blit(each[0], (i, j+mm*HEIGHT/num_part)) mm += 1i += stepif i >= WIDTH: flag2 = Trueelse: screen.blit(nextimage, (0, 0)) screen.blit(runimage, (0, 0))if flag2: reset()fcclock.tick(fps)pygame.display.flip() # 刷新窗口if __name__ == ’__main__’: init_image() run()五、運行效果

Python趣味挑戰之pygame實現無敵好看的百葉窗動態效果

OK,寫完,其實還是蠻有趣的,大家可以自動動手敲敲,也許比我寫的更好。

到此這篇關于Python趣味挑戰之pygame實現無敵好看的百葉窗動態效果的文章就介紹到這了,更多相關pygame實現百葉窗動態效果內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产99视频精品免费视频免里 | 尤物蜜芽福利国产污在线观看 | 久久久久女人精品毛片九一 | 亚洲精品免费视频 | 国产欧美日韩免费一区二区 | 一级特黄一欧美俄罗斯毛片 | 国产亚洲在线 | 日韩毛片在线免费观看 | 日本免费二区三区久久 | 成人毛片免费观看视频在线 | 特色毛片 | 国产福利拍拍拍 | 国产精品欧美激情在线播放 | 在线观看亚洲免费 | 欧美一级欧美三级 | 国产高清视频在线 | www.久久综合| 欧美黑寡妇特a级做爰 | 国产一级特黄aa级特黄裸毛片 | 最新国产午夜精品视频成人 | 亚欧精品一区二区三区 | 一区视频| 久久精品国产三级不卡 | 中文字幕精品一区二区精品 | 巨大热杵在腿间进进出出视频 | 国产成人亚洲综合欧美一部 | 一本久久道 | 国产第一区二区三区在线观看 | 国内精品久久影院 | 美女张开腿让男人操 | 欧美α一级毛片 | 欧美在线三级 | 亚洲二区在线 | 国产真实自拍 | 日韩久久久精品中文字幕 | 亚洲香蕉一区二区三区在线观看 | 亚洲精品久久久久午夜三 | 亚洲欧美日韩综合一区久久 | 欧美 亚洲 另类 自拍 在线 | 国产伦久视频免费观看 视频 | 夜色成人免费观看 |