Python pygame作為一門常見的技能,其實(shí),它的應(yīng)用范圍還是比較的廣泛的,那么,它是怎么實(shí)現(xiàn)其拼圖游戲呢?下面就以案例的形式,去給大家做個(gè)解答,下面就給大家詳細(xì)解答下。
pygame介紹
Python Pygame是一款專門為開發(fā)和設(shè)計(jì)2D電子游戲而生的軟件包,它支Windows、Linux、Mac OS等操作系統(tǒng),具有良好的跨平臺(tái)性。Pygame由Pete Shinners于2000年開發(fā)而成,是一款免費(fèi)、開源的的軟件包,因此您可以放心地使用它來開發(fā)游戲,不用擔(dān)心有任何費(fèi)用產(chǎn)生。
Pygame在SDL(Simple DirectMedia Layer,使用C語(yǔ)言編寫的多媒體開發(fā)庫(kù))的基礎(chǔ)上開發(fā)而成,它提供了諸多操作模塊,比如圖像模塊(image)、聲音模塊(mixer)、輸入/輸出(鼠標(biāo)、鍵盤、顯示屏)模塊等。相比于開發(fā)3D游戲而言,Pygame更擅長(zhǎng)開發(fā)2D游戲,比如于飛機(jī)大戰(zhàn)、貪吃蛇、掃雷等游戲。
安裝pygame
pip install pygame
pygame常用模塊
pygame.cdrom訪問光驅(qū)
pygame.cursors加載光標(biāo)
pygame.display訪問顯示設(shè)備
pygame.draw繪制形狀、線和點(diǎn)
pygame.event管理事件
pygame.font使用字體
pygame.image加載和存儲(chǔ)圖片
pygame.joystick使用游戲手柄或者類似的東西
pygame.key讀取鍵盤按鍵
pygame.mixer聲音
pygame.mouse鼠標(biāo)
pygame.movie播放視頻
pygame.music播放音頻
pygame.overlay訪問高級(jí)視頻疊加
pygame.rect管理矩形區(qū)域
pygame.scrap本地剪貼板訪問
pygame.sndarray操作聲音數(shù)據(jù)
pygame.sprite操作移動(dòng)圖像
pygame.surface管理圖像和屏幕
pygame.surfarray管理點(diǎn)陣圖像數(shù)據(jù)
pygame.time管理時(shí)間和幀信息
pygame.transform縮放和移動(dòng)圖像
pygame入門案例
import pygame import sys pygame.init()#初始化pygame size=width,height=320,240#設(shè)置窗口大小 screen=pygame.display.set_mode(size)#顯示窗口 while True:#死循環(huán)確保窗口一直顯示 for event in pygame.event.get():#遍歷所有事件 if event.type==pygame.QUIT:#如果單擊關(guān)閉窗口,則退出 sys.exit() pygame.quit()#退出pygame pygame實(shí)現(xiàn)拼圖游戲 import pygame,sys,random from pygame.locals import* #一些常量 WINDOWWIDTH=500 WINDOWHEIGHT=500 BACKGROUNDCOLOR=(255,255,255) BLUE=(0,0,255) BLACK=(0,0,0) FPS=40 VHNUMS=3 CELLNUMS=VHNUMS*VHNUMS MAXRANDTIME=100 #退出 def terminate(): pygame.quit() sys.exit() #隨機(jī)生成游戲盤面 def newGameBoard(): board=[] for i in range(CELLNUMS): board.append(i) blackCell=CELLNUMS-1 board[blackCell]=-1 for i in range(MAXRANDTIME): direction=random.randint(0,3) if(direction==0): blackCell=moveLeft(board,blackCell) elif(direction==1): blackCell=moveRight(board,blackCell) elif(direction==2): blackCell=moveUp(board,blackCell) elif(direction==3): blackCell=moveDown(board,blackCell) return board,blackCell #若空白圖像塊不在最左邊,則將空白塊左邊的塊移動(dòng)到空白塊位置 def moveRight(board,blackCell): if blackCell%VHNUMS==0: return blackCell board[blackCell-1],board[blackCell]=board[blackCell],board[blackCell-1] return blackCell-1 #若空白圖像塊不在最右邊,則將空白塊右邊的塊移動(dòng)到空白塊位置 def moveLeft(board,blackCell): if blackCell%VHNUMS==VHNUMS-1: return blackCell board[blackCell+1],board[blackCell]=board[blackCell],board[blackCell+1] return blackCell+1 #若空白圖像塊不在最上邊,則將空白塊上邊的塊移動(dòng)到空白塊位置 def moveDown(board,blackCell): if blackCell<VHNUMS: return blackCell board[blackCell-VHNUMS],board[blackCell]=board[blackCell],board[blackCell-VHNUMS] return blackCell-VHNUMS #若空白圖像塊不在最下邊,則將空白塊下邊的塊移動(dòng)到空白塊位置 def moveUp(board,blackCell): if blackCell>=CELLNUMS-VHNUMS: return blackCell board[blackCell+VHNUMS],board[blackCell]=board[blackCell],board[blackCell+VHNUMS] return blackCell+VHNUMS #是否完成 def isFinished(board,blackCell): for i in range(CELLNUMS-1): if board<i>!=i: return False return True #初始化 pygame.init() mainClock=pygame.time.Clock() #加載圖片 gameImage=pygame.image.load('1.jpg') gameRect=gameImage.get_rect() #設(shè)置窗口,窗口的寬度和高度取決于圖片的寬高 windowSurface=pygame.display.set_mode((gameRect.width,gameRect.height)) pygame.display.set_caption('拼圖') cellWidth=int(gameRect.width/VHNUMS) cellHeight=int(gameRect.height/VHNUMS) finish=False gameBoard,blackCell=newGameBoard() #游戲主循環(huán) while True: for event in pygame.event.get(): if event.type==QUIT: terminate() if finish: continue if event.type==KEYDOWN: if event.key==K_LEFT or event.key==ord('a'): blackCell=moveLeft(gameBoard,blackCell) if event.key==K_RIGHT or event.key==ord('d'): blackCell=moveRight(gameBoard,blackCell) if event.key==K_UP or event.key==ord('w'): blackCell=moveUp(gameBoard,blackCell) if event.key==K_DOWN or event.key==ord('s'): blackCell=moveDown(gameBoard,blackCell) if event.type==MOUSEBUTTONDOWN and event.button==1: x,y=pygame.mouse.get_pos() col=int(x/cellWidth) row=int(y/cellHeight) index=col+row*VHNUMS if( index==blackCell-1 or index==blackCell+1 or index==blackCell-VHNUMS or index==blackCell+VHNUMS): gameBoard[blackCell],gameBoard[index]=gameBoard[index],gameBoard[blackCell] blackCell=index if(isFinished(gameBoard,blackCell)): gameBoard[blackCell]=CELLNUMS-1 finish=True windowSurface.fill(BACKGROUNDCOLOR) for i in range(CELLNUMS): rowDst=int(i/VHNUMS) colDst=int(i%VHNUMS) rectDst=pygame.Rect(colDst*cellWidth,rowDst*cellHeight,cellWidth,cellHeight) if gameBoard<i>==-1: continue rowArea=int(gameBoard<i>/VHNUMS) colArea=int(gameBoard<i>%VHNUMS) rectArea=pygame.Rect(colArea*cellWidth,rowArea*cellHeight,cellWidth,cellHeight) windowSurface.blit(gameImage,rectDst,rectArea) for i in range(VHNUMS+1): pygame.draw.line(windowSurface,BLACK,(i*cellWidth,0),(i*cellWidth,gameRect.height)) for i in range(VHNUMS+1): pygame.draw.line(windowSurface,BLACK,(0,i*cellHeight),(gameRect.width,i*cellHeight)) pygame.display.update() mainClock.tick(FPS)
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/128324.html
pygame模塊是一個(gè)可以跨平臺(tái)的模塊,主要就是作為游戲開發(fā)來進(jìn)行使用的,那么,怎么才能夠?qū)崿F(xiàn)其游戲開發(fā)的技能了?比如說,怎么實(shí)現(xiàn)使用pygame去實(shí)現(xiàn)拼圖的游戲呢?下面就給大家詳細(xì)解答下。 pygame介紹 Python Pygame是一款專門為開發(fā)和設(shè)計(jì)2D電子游戲而生的軟件包,它支Windows、Linux、Mac OS等操作系統(tǒng),具有良好的跨平臺(tái)性。Pygame由Pete Shin...
小編寫此篇文章的目的,主要是給大家來做一個(gè)解答,解答關(guān)于pygame中Rect對(duì)象的相關(guān)內(nèi)容知識(shí),下面就給大家做一個(gè)比較詳細(xì)的解答。 class pygame.Rect Rect 對(duì)象的屬性: Rect表示的區(qū)域必須位于一個(gè)Surface對(duì)象之上,比如游戲的主窗口(screen)。上述方法由四個(gè)關(guān)鍵參數(shù)值構(gòu)成,分別是left、top、width、height,為了方便大家理解這些距離的含...
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
pygame作為一個(gè)跨平臺(tái)的python數(shù)據(jù)庫(kù),編輯起來也是比較的簡(jiǎn)單的,只需要一段簡(jiǎn)潔的代碼,就能高效的完成一些任務(wù),能夠快速的實(shí)現(xiàn)其相關(guān)的一些應(yīng)用服務(wù)。那么,如何使用pygame去做自定義窗口呢?怎么創(chuàng)建操作指南?下面給大家詳細(xì)解答下。 1.首先,我們需要導(dǎo)入幾個(gè)相關(guān)模塊 importpygame importsys frompygame.localsimport* 2,初始...
閱讀 919·2023-01-14 11:38
閱讀 891·2023-01-14 11:04
閱讀 750·2023-01-14 10:48
閱讀 2039·2023-01-14 10:34
閱讀 956·2023-01-14 10:24
閱讀 833·2023-01-14 10:18
閱讀 506·2023-01-14 10:09
閱讀 583·2023-01-14 10:02