国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

瀏覽:15日期: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 編程
相關文章:
主站蜘蛛池模板: 怡红院成人网 | 中文字幕亚洲欧美日韩不卡 | 色香欲综合成人免费视频 | 亚洲国产精品日韩在线观看 | 日本人一级毛片免费视频 | 另类女最新视频 | 欧美日韩一区二区三区在线 | 亚洲在线不卡 | 91久久国产成人免费观看资源 | 成人在线a | 看性过程三级视频在线观看 | 免费视频精品一区二区三区 | 免费在线精品视频 | 男女午夜爱爱久久无遮挡 | 免费精品久久久久久中文字幕 | 丁香婷婷影音先锋5566 | 久久国产成人福利播放 | www.久久爱.com| 草草在线观看视频 | 久久最新免费视频 | 国产午夜精品免费一二区 | 精品国产自 | 欧美人成在线观看网站高清 | 成年人免费大片 | 国产精品国产三级在线高清观看 | 久久99精品视频在线在线观看 | 韩国毛片基地 | 99这里只有精品视频 | 国产女主播91 | 亚洲精品色综合色在线观看 | 免费观看性欧美大片无片 | 国产乱码精品一区二区三上 | 日本波多野结衣视频 | 草草在线观看视频 | 欧美一区二区三区视频 | 亚洲综合射| 久久国内精品自在自线观看 | 亚洲黄色三级视频 | 成年女人看片免费视频播放器 | 欧美精品首页 | 成人亚洲欧美日韩中文字幕 |