小學(xué)Python系列少兒編程課程《第10章 玩游戲不如自己開發(fā)游戲》課件_第1頁
小學(xué)Python系列少兒編程課程《第10章 玩游戲不如自己開發(fā)游戲》課件_第2頁
小學(xué)Python系列少兒編程課程《第10章 玩游戲不如自己開發(fā)游戲》課件_第3頁
小學(xué)Python系列少兒編程課程《第10章 玩游戲不如自己開發(fā)游戲》課件_第4頁
小學(xué)Python系列少兒編程課程《第10章 玩游戲不如自己開發(fā)游戲》課件_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Python少兒編程第十章玩游戲不如自己開發(fā)游戲目錄1.1Python的游戲開發(fā)裝備1.2Pygame大顯身手PART01Python的游戲開發(fā)裝備Pygame簡介1.1Pygame是一個用于開發(fā)游戲的Python模塊,它是在SDL庫的基礎(chǔ)上開發(fā)的。通過Pygame,用戶可以開發(fā)功能豐富的游戲和多媒體程序。此外,Pygame是一個可移植性很高的模塊,可支持多個操作系統(tǒng),非常適合小游戲的開發(fā)。Pygame是一個由一系列模塊組成的集合包,不同的模塊可以實現(xiàn)游戲中不同的功能,Pygame所有模塊列表如表10-1所示。表10-1Pygame所有模塊列表Pygame簡介1.1表10-1Pygame所有模塊列表(續(xù))Pygame第三方庫安裝1.1步驟1啟動PyCharm,新建“第10章”項目,然后在菜單欄中選擇“文件”→“設(shè)置”選項,如圖10-1所示。圖10-1設(shè)置項目Pygame第三方庫安裝1.1步驟2

打開“設(shè)置”對話框,選擇“項目:第10章”→“Python解釋器”選項,然后在顯示的列表框上方單擊“+”按鈕,如圖10-2所示。圖10-2選擇安裝項目Pygame第三方庫安裝1.1步驟3

打開“可用包”對話框,在搜索欄中輸入“pygame”,然后在顯示的列表中選擇“pygame”選項,單擊“安裝包”按鈕,如圖10-3所示。步驟4等待安裝,安裝成功后,“可用包”對話框中將顯示“已成功安裝包‘pygame’”,如圖10-4所示。圖10-3選擇安裝庫

圖10-4成功安裝Pygame第三方庫安裝1.1步驟5

關(guān)閉“可用包”對話框,返回“設(shè)置”對話框,在已安裝庫列表中可看到“pygame”,單擊“確定”按鈕即可完成安裝,如圖10-5所示。圖10-5完成安裝PART02Pygame大顯身手創(chuàng)建窗口2.1所有游戲都在一個固定的窗口(或屏幕)進行操作,故開發(fā)游戲的第一步就是創(chuàng)建窗口。pygame.display模塊提供了set_mode()方法用于初始化一個窗口,其方法原型如下。

set_mode(resolution=(0,0)[,flags=0,depth=0])其中,resolution是一個二元組,表示寬和高,單位為像素;flags用于指定擴展選項,可同時指定多個選項(使用“|”操作符隔開),具體選項如表10-2所示;depth表示顏色深度,如果缺省,系統(tǒng)會自動選擇一個最優(yōu)值。該方法返回一個Surface對象(即Pygame用來表示圖像的對象)。創(chuàng)建窗口2.1表10-2flags可用的選項創(chuàng)建窗口2.1pygame.image模塊提供了load()方法用于加載圖片,其方法原型如下。load(filename)其中,filename為加載的圖片的名稱(可包含路徑)。該方法返回一個Surface對象。圖片加載完成后,并不是顯示在窗口中,而是轉(zhuǎn)換成一個Surface對象,想要將其在窗口上顯示,須使用pygame.surface模塊中的blit()方法將一個圖像繪制到另一個圖像上,其方法原型如下。blit(source,dest[,area=None,special_flags=0])其中,source為Surface對象(即顯示的圖片);dest為坐標(biāo)值,一般為source的左上角坐標(biāo);area為圖片繪制的區(qū)域;special_flags用于指定混合模式。加載圖片2.2pygame.image模塊提供了load()方法用于加載圖片,其方法原型如下。load(filename)其中,filename為加載的圖片的名稱(可包含路徑)。該方法返回一個Surface對象。圖片加載完成后,并不是顯示在窗口中,而是轉(zhuǎn)換成一個Surface對象,想要將其在窗口上顯示,須使用pygame.surface模塊中的blit()方法將一個圖像繪制到另一個圖像上,其方法原型如下。blit(source,dest[,area=None,special_flags=0])其中,source為Surface對象(即顯示的圖片);dest為坐標(biāo)值,一般為source的左上角坐標(biāo);area為圖片繪制的區(qū)域;special_flags用于指定混合模式。加載圖片2.2【例10-1】

創(chuàng)建一個窗口,并加載一張圖片作為背景?!締栴}分析】

首先,使用import語句導(dǎo)入所需模塊(如pygame、sys);接著,初始化pygame;然后,創(chuàng)建窗口、設(shè)置窗口標(biāo)題、加載背景圖片、繪制圖形及刷新繪圖;最后,程序進入無限循環(huán),判斷是否獲取退出事件,如果是,則退出程序。【參考代碼】importpygame,sys #導(dǎo)入模塊pygame.init() #初始化pygamescreen=pygame.display.set_mode((400,200)) #設(shè)置窗口大小pygame.display.set_caption('貪吃蛇') #設(shè)置窗口標(biāo)題加載圖片2.2【參考代碼】(續(xù))#加載背景圖片background=pygame.image.load('images\\貪吃蛇.jpg')screen.blit(background,(0,0)) #將背景繪制到窗口的(0,0)位置pygame.display.update() #刷新繪圖whileTrue: #循環(huán)foreventinpygame.event.get(): #獲取事件并遍歷ifevent.type==pygame.QUIT: #如果為退出事件pygame.quit() #退出pygamesys.exit() #退出系統(tǒng)加載圖片2.2【運行結(jié)果】

程序運行結(jié)果如圖10-6所示。圖10-6例10-1程序運行結(jié)果繪制圖形2.3pygame.draw模塊中常用的方法如表10-3所示。表10-3pygame.draw模塊中常用的方法繪制圖形2.3表10-3pygame.draw模塊中常用的方法(續(xù))繪制圖形2.3【例10-2】

繪制多種圖形?!緟⒖即a】#導(dǎo)入模塊和常量importpygame,sysfrommathimportpipygame.init() #初始化pygamescreen=pygame.display.set_mode((520,250)) #設(shè)置窗口大小pygame.display.set_caption('繪制圖形') #設(shè)置窗口標(biāo)題#定義顏色BLACK=(0,0,0)WHITE=(255,255,255)RED=(255,0,0)繪制圖形2.3【參考代碼】(續(xù))GREEN=(0,255,0)BLUE=(0,0,255)screen.fill(WHITE) #設(shè)置背景顏色#繪制一條線pygame.draw.line(screen,RED,[10,10],[50,10],2)#繪制一條抗鋸齒的線pygame.draw.aaline(screen,GREEN,[10,50],[50,50],True)#繪制一條折線pygame.draw.lines(screen,BLACK,False,[[75,10],[125,10],[125,50]],5)#繪制一條閉環(huán)折線pygame.draw.lines(screen,BLACK,True,[[150,10],[200,10],[200,50]],5)#繪制一個矩形框繪制圖形2.3【參考代碼】(續(xù))pygame.draw.rect(screen,BLUE,[225,10,50,40],2)#繪制一個矩形pygame.draw.rect(screen,BLUE,[300,10,50,40])#繪制一個橢圓框pygame.draw.ellipse(screen,RED,[375,10,50,40],2)#繪制一個橢圓pygame.draw.ellipse(screen,RED,[450,10,50,40])#繪制多邊形(三角形)pygame.draw.polygon(screen,BLACK,[[10,200],[120,100],[150,200]],5)繪制圖形2.3【參考代碼】(續(xù))#繪制多條弧線pygame.draw.arc(screen,BLACK,[200,90,150,125],0,pi/2,2)pygame.draw.arc(screen,GREEN,[200,90,150,125],pi/2,pi,2)pygame.draw.arc(screen,BLUE,[200,90,150,125],pi,3*pi/2,2)pygame.draw.arc(screen,RED,[200,90,150,125],3*pi/2,2*pi,2)#繪制一個圓pygame.draw.circle(screen,BLUE,[450,150],60,2)#刷新繪圖pygame.display.update() whileTrue: #循環(huán)foreventinpygame.event.get(): #獲取事件并遍歷ifevent.type==pygame.QUIT: #如果為退出事件pygame.quit() #退出pygamesys.exit() #退出系統(tǒng)繪制圖形2.3【運行結(jié)果】

程序運行結(jié)果如圖10-7所示。圖10-7例10-2程序運行結(jié)果設(shè)置動畫效果2.4物體移動的原理很簡單,即在原有坐標(biāo)的基礎(chǔ)上增加偏移量,再重新繪制圖片,依次一張一張地循環(huán)繪制下去,就可以得到物體移動的效果。此外,需要考慮兩個畫面之間的時間間隔,即經(jīng)過多長時間繪制下一張圖片。pygame.time模塊提供了一個Clock對象,使用其tick()方法可解決上述問題。(1)通過pygame.time.Clock()方法創(chuàng)建對象獲得pygame的時鐘。(2)使用pygame.time.Clock.tick(FPS)方法設(shè)置pygame時鐘的時間間隔。設(shè)置動畫效果2.4【例10-3】

設(shè)置動畫效果示例?!緟⒖即a】importpygame,sys #導(dǎo)入模塊pygame.init() #初始化pygameFPS=30 #設(shè)置幀率fpsClock=pygame.time.Clock() #創(chuàng)建時鐘對象screen=pygame.display.set_mode((500,400)) #設(shè)置窗口大小pygame.display.set_caption('動畫') #設(shè)置窗口標(biāo)題WHITE=(255,255,255) #定義顏色img=pygame.image.load('images\\球.png') #加載圖片imgx,imgy=10,10 #初始化圖片的位置direction='right' #初始化圖片的移動方向設(shè)置動畫效果2.4【參考代碼】(續(xù))whileTrue: #循環(huán)screen.fill(WHITE) #背景填充為白色ifdirection=='right': #如果圖片向右移動imgx+=5 #圖片x坐標(biāo)加5ifimgx==420: #如果圖片x坐標(biāo)等于420direction='down' #設(shè)置方向為向下elifdirection=='down': #如果圖片向下移動imgy+=5 #圖片y坐標(biāo)加5ifimgy==320: #如果圖片y坐標(biāo)等于320direction='left' #設(shè)置方向為向左elifdirection=='left': #如果圖片向左移動imgx-=5 #圖片x坐標(biāo)減5ifimgx==0: #如果圖片x坐標(biāo)等于0direction='up' #設(shè)置方向為向上設(shè)置動畫效果2.4【參考代碼】(續(xù))elifdirection=='up': #如果圖片向上移動imgy-=5 #圖片y坐標(biāo)減5ifimgy==0: #如果圖片y坐標(biāo)等于0direction='right' #設(shè)置方向為向右screen.blit(img,(imgx,imgy)) #繪制圖片foreventinpygame.event.get(): #獲取事件并遍歷ifevent.type==pygame.QUIT: #如果為退出事件pygame.quit() #退出pygamesys.exit() #退出系統(tǒng)pygame.display.update() #刷新繪圖fpsClock.tick(FPS) #設(shè)置時鐘的時間間隔設(shè)置動畫效果2.4【運行結(jié)果】

運行程序,可以看到小球自左往右、自上往下、自右往左、自下往上循環(huán)移動,部分顯示結(jié)果如圖10-8所示。圖10-8例10-3程序運行結(jié)果播放聲音2.5播放音效使用pygame.mixer模塊,須首先創(chuàng)建一個Sound對象,其語法格式如下。Sound(filename)其中,filename為音頻文件名(可包含路徑)。創(chuàng)建Sound對象后,可使用play()方法播放音效。Sound對象的常用方法如表10-4所示。表10-4Sound對象的常用方法播放聲音2.5播放背景音樂使用pygame.music模塊,它是pygame.mixer模塊的一個特殊實現(xiàn),使用時須通過pygame.mixer.music調(diào)用其方法。pygame.music模塊的常用方法如表10-5所示。表10-5pygame.music模塊的常用方法播放聲音2.5【例10-4】

播放聲音示例?!緟⒖即a】importpygame,sys #導(dǎo)入模塊pygame.init() #初始化pygamescreen=pygame.display.set_mode((400,300)) #設(shè)置窗口大小pygame.display.set_caption('播放聲音') #設(shè)置窗口標(biāo)題background=pygame.image.load('images\\煙花.jpg') #加載背景圖片screen.blit(background,(0,0)) #繪制背景sound=pygame.mixer.Sound('sounds\\燃放煙花.wav') #創(chuàng)建音效對象pygame.display.update() #刷新繪圖播放聲音2.5【參考代碼】(續(xù))#加載背景音樂文件pygame.mixer.music.load('sounds\\新年好.mp3')#播放背景音樂,第一個參數(shù)為播放的次數(shù)(-1表示無限循環(huán)),第二個參數(shù)是設(shè)置播放的起點(單位為秒)pygame.mixer.music.play(-1,0.0)whileTrue: #循環(huán)sound.play() #播放音效foreventinpygame.event.get(): #獲取事件并遍歷ifevent.type==pygame.QUIT: #如果為退出事件pygame.mixer.music.stop() #停止播放背景音樂pygame.quit() #退出pygamesys.exit() #退出系統(tǒng)播放聲音2.5【運行結(jié)果】

運行程序,出現(xiàn)主界面(見圖10-9),然后直接播放音效和背景音樂。圖10-9例10-4程序運行結(jié)果顯示文字2.6如果想要將文字顯示到屏幕上,須首先使用pygame.font模塊中的Font()方法創(chuàng)建一個Font對象,其語法格式如下。Font(filename,size)其中,filename為字體文件名稱(一般為“.ttf”格式);size為字體的大小,單位為像素。創(chuàng)建Font對象后,須使用render()方法返回一個Surface對象繪制文本,其語法格式如下。render(text,antialias,color[,background=None])其中,text為要顯示的文字;antialias是個布爾值,表示是否開啟抗鋸齒,當(dāng)為True時字體比較平滑;color為文字顏色;background為背景顏色。最后還須使用blit()方法顯示文字。顯示文字2.6【例10-5】

顯示文字示例。【參考代碼】importpygame,sys #導(dǎo)入模塊pygame.init() #初始化pygamescreen=pygame.display.set_mode((260,100)) #設(shè)置窗口大小pygame.display.set_caption('顯示文字') #設(shè)置窗口標(biāo)題#定義顏色WHITE=(255,255,255)RED=(255,0,0)GREEN=(0,255,0)#創(chuàng)建字體對象font=pygame.font.Font('fonts\\simkai.ttf',30)顯示文字2.6【參考代碼】(續(xù))#設(shè)置顯示的文字,創(chuàng)建文字對象textSurface=font.render('恭喜你,你贏了!',True,GREEN,RED)screen.fill(WHITE) #背景填充為白色textRect=textSurface.get_rect() #獲取文字對象的recttextRect.center=(130,50) #設(shè)置文字對象的中心坐標(biāo)screen.blit(textSurface,textRect) #繪制文字pygame.display.update() #刷新繪圖whileTrue: #循環(huán)foreventinpygame.event.get(): #獲取事件并遍歷ifevent.type==pygame.QUIT: #如果為退出事件pygame.quit() #退出pygamesys.exit() #退出系統(tǒng)顯示文字2.6【運行結(jié)果】

運行程序,窗口中顯示綠色的“恭喜你,你贏了!”文字,其背景色為紅色,如圖10-10所示。圖10-10例10-5程序運行結(jié)果事件處理2.7Pygame會接收用戶各種操作(如按下或釋放按鍵、移動鼠標(biāo)、按下或釋放鼠標(biāo)等)產(chǎn)生的事件。事件隨時可能發(fā)生,Pygame將一系列事件存放在一個事件隊列里,然后通過for循環(huán)取出每一個事件與產(chǎn)生的事件進行比較,如果相等則處理產(chǎn)生的事件。一般可使用pygame.event模塊中的get()方法來獲取所有事件,Pygame中常用的事件如表10-6所示。事件處理2.7表10-6Pygame中常用的事件事件處理2.7【例10-6】

事件處理示例?!緟⒖即a】importpygame,sys #導(dǎo)入模塊pygame.init() #初始化pygamescreen=pygame.display.set_mode((400,300)) #設(shè)置窗口大小pygame.display.set_caption('事件處理') #設(shè)置窗口標(biāo)題image=pygame.image.load('images\\蝴蝶.png') #加載圖片WHITE=(255,255,255) #定義顏色x,y=200,150 #初始化圖片位置事件處理2.7【參考代碼】(續(xù))whileTrue: #循環(huán)foreventinpygame.event.get(): #獲取事件并遍歷#如果移動鼠標(biāo),獲得鼠標(biāo)當(dāng)前位置ifevent.type==pygame.MOUSEMOTION:x=event.pos[0]y=event.pos[1]#如果按下鼠標(biāo),輸出鼠標(biāo)按下位置ifevent.type==pyg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論