Python程序設(shè)計(jì)第13章游戲開發(fā)(16次課)全解課件_第1頁
Python程序設(shè)計(jì)第13章游戲開發(fā)(16次課)全解課件_第2頁
Python程序設(shè)計(jì)第13章游戲開發(fā)(16次課)全解課件_第3頁
Python程序設(shè)計(jì)第13章游戲開發(fā)(16次課)全解課件_第4頁
Python程序設(shè)計(jì)第13章游戲開發(fā)(16次課)全解課件_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第13章游 戲 開 發(fā)第1頁,共39頁。主要內(nèi)容1. 圖形化的問候問題2. Pygame基礎(chǔ)知識 3. Pygame基礎(chǔ)知識應(yīng)用第2頁,共39頁。1.圖形化的問候問題初學(xué)者編寫的第一個(gè)程序往往是顯示問候語“Hello World!”,那么初學(xué)游戲開發(fā)的能不能用漂亮的圖形進(jìn)行問候呢?第3頁,共39頁。【問題13-1】小游戲,讓鷹隨鼠標(biāo)移動。分析需要載入鷹的圖片,背景圖片,需要建立窗口,要讓鷹隨鼠標(biāo)移動需要管理鼠標(biāo)事件,這些都能用Pygame做到。第4頁,共39頁。框圖第5頁,共39頁。#Ques13_1.py#導(dǎo)入pygame庫import pygame#導(dǎo)入一些常用的函數(shù)和常量from pyg

2、ame.locals import *#指定圖像文件名稱background_image_filename =火星12.jpg#火星的紋路沙丘.jpgmouse_image_filename =鷹3.gif #butterfly3.gif#初始化pygame,為使用硬件做準(zhǔn)備 pygame.init()第6頁,共39頁。#加載圖像background =pygame.image.load(background_image_filename)mouse_cursor = pygame.image.load(mouse_image_filename)#按圖像的寬、高創(chuàng)建一個(gè)窗口screen = p

3、ygame.display.set_mode(int(background.get_width(),int(background.get_height(),0, 32)#設(shè)置窗口標(biāo)題pygame.display.set_caption(Hello,World! From pygame)pygame.mouse.set_visible(False) 第7頁,共39頁。第8頁,共39頁。圖13-2 鷹在火星的干冰跡上空飛翔第9頁,共39頁。2. pygame基礎(chǔ)知識Pygame是建立在SDL的基礎(chǔ)之上的軟件包。SDL提供了一種簡單的方式控制媒體信息,而且能夠跨平臺使用。Pygame是跨平臺Pyth

4、on模塊,專為電子游戲設(shè)計(jì),包含圖像、聲音。由于Pygame和SDL是開源的,所以一大批游戲開發(fā)者不斷地對它們進(jìn)行了完善和增強(qiáng)。第10頁,共39頁。 Pygame的安裝下載:檢驗(yàn)是否安裝成功: import pygame print pygame.ver如果安裝成功,則會顯示pygame的版本號。第11頁,共39頁。Pygame的模塊第12頁,共39頁。Pygame模塊會自動導(dǎo)入其他Pygame模塊。所以如果在程序的首部放置了import pyagme語句的話,就能自動訪問其他的模塊了。init()函數(shù)是Pygame游戲的核心。必須在進(jìn)入游戲主循環(huán)之前調(diào)用。這個(gè)函數(shù)會自動初始化其他所有模塊,它

5、載入驅(qū)動和硬件請求,游戲程序才可以使用計(jì)算機(jī)上的所有設(shè)備。然而初始化時(shí)間比較長,如果只是使用少量模塊,應(yīng)該分別初始化這些模塊一節(jié)省時(shí)間。注意:由于硬件和游戲的兼容性或是請求的驅(qū)動沒有安裝的問題,并不是所有的模塊都可以在所有平臺使用。第13頁,共39頁。測試字體是否載入: if pygame.font is None: Print The font is not available ! Pygame.quit()如果沒有則退出pygame的應(yīng)用環(huán)境第14頁,共39頁。1、Surface Surface()函數(shù)的一般格式為: Pygame.surface(width, height), flags

6、=0, depth=0, masks=none) 它返回一個(gè)新的surface對象。這里的surface對象是一個(gè)有確定尺寸的空圖像,可以用它來進(jìn)行圖像繪制與移動。2、Locals Locals模塊中定義了pygame環(huán)境中用到的各種常量,而且包括事件類型,鍵和視頻模式等的名字。在導(dǎo)入所有內(nèi)容時(shí)用起來是很安全的。如果知道需要的內(nèi)容,也可以導(dǎo)入具體的內(nèi)容(比如:from pygame.locals import FULLSCREEN)。常用模塊簡要說明:第15頁,共39頁。3、Display 處理pygame顯示方式的函數(shù),其中包括普通窗口和 全屏模式。 程序通常需要下面的函數(shù): flip /

7、update 更新顯示。 set_mode 建立游戲窗口,有三個(gè)參數(shù),指定窗口尺 寸,對屏幕進(jìn)行設(shè)置,制定窗口的色彩位數(shù)。 set_caption 設(shè)定程序標(biāo)題。 get_surface 返回一個(gè)可用來畫圖的surface圖像。4、Font 字體font模塊用于表現(xiàn)不同字體,可以用于文本 第16頁,共39頁。5、Sprite Sprite模塊有兩個(gè)非常重要的類:sprite和group。Sprite類是所有可視游戲的基類。為了實(shí)現(xiàn)自己的游戲?qū)ο?,需要子類化sprite,覆蓋它的構(gòu)造函數(shù)以設(shè)定imge和rect屬性,再覆蓋update()方法。在sprite需要跟新的時(shí)候可以調(diào)用。 Groug類

8、的實(shí)例用作sprite對象的容器。在一些簡單的游戲中,只要創(chuàng)建名為sprite或是allsprite或是其他類似的組,然后將所有sprite對象添加到上面即可。6、Mouse 用來管理鼠標(biāo)。 Pygame. Mouse. Set_visible(false / true) 隱藏/ 顯示鼠標(biāo)光標(biāo) Pygame. Mouse. get_pos( ) 獲取鼠標(biāo)位置第17頁,共39頁。7、Event Event模塊會追蹤鼠標(biāo)單擊、鼠標(biāo)移動、按鍵按下和釋放等事件。 Pygame. Event. Get () 可以獲取最近事件列表。8、Image 這個(gè)模塊用于處理保存在GIF、PNG或者JPEG內(nèi)的圖形。

9、可用load()函數(shù)來讀取圖像文件。第18頁,共39頁。13.2.3 pygame 的使用1.用pygame開發(fā)程序的主要流程第19頁,共39頁。 基礎(chǔ)是創(chuàng)建游戲窗口 核心是處理時(shí)間、更新游戲狀態(tài)和在屏幕上繪圖。 游戲狀態(tài):為程序中所有變量的值的集合,在有些游戲中,游戲狀態(tài)包括存放人物健康和位置的變量,物體或圖形位置的變化,這些值可以在屏幕中顯示。 物體或圖形位置的變化只有通過在屏幕上繪圖才能看出來第20頁,共39頁。2.鼠標(biāo)按鍵處理 通過鼠標(biāo)事件處理來決定游戲的開始和結(jié)束、某些狀態(tài)的變化。常用處理代碼如下: pressed_mouse=pygame.mouse.get_pressed() #

10、獲得鼠標(biāo)的按鍵情況 if pressed_mouse0: #鼠標(biāo)左鍵按下的處理 movement_direction=+1. if pressde_mouse2: #鼠標(biāo)右鍵按下的處理 movement_direction=-1. x,y=pygame.mouse.get_pos() #獲得鼠標(biāo)位置第21頁,共39頁。3.鍵盤事件處理 通過鍵盤事件處理同樣可以決定游戲的開始和結(jié)束、某些狀態(tài)的變化。常用的處理代碼如下: pressed_keys=pygame.key.get_pressed() rotation_direction=+1 if pressed_keysK_RIGHT: #右方向鍵

11、按下的處理 rotation_direction=-1 if pressed_keysK_UP: #上方向鍵按下的處理 movement_direction=+1 if pressed_keysK_DOWN: #下方向鍵按下的處理 movement_direction=-1第22頁,共39頁。4.字體的使用 使用字體可以在游戲窗口上顯示不同字體的文字。 使用字體的常用代碼如下: font=pygame.font.SysFont(stcaiyun,120) #獲取字體對象 text_surface=font.render(u”abc123 你好”,Ture, (0,125,255) #生成文本的

12、surface screen.blit(text_surface,(x,y) #在坐標(biāo)點(diǎn)(x,y)顯示文字 獲取字體對象是關(guān)鍵的一步,如果獲取失敗,將無法顯示漢字。獲取字體對象可以通過字體名稱獲取,如上面代碼??捎孟旅娲a查看機(jī)器中的字體名稱: f2=pygame.font.get_fonts()_ f2.sort() f2第23頁,共39頁。 會顯示出很多字體名稱,很多是不能用的,某機(jī)器(window7,64位)可用的字體名稱如下:simhei,simsunnsimsun,stcaiyun,stencil,stfangsong,sthupostkaiti,stliti,stsong,stxi

13、hei,stxingkai,stxinwei,stzhongsong 通過字體文件名來獲得字體對象,這需要知道字體文件的路徑,如Font=pygame.font.Font(“C:/Windows/Fonts/STXINGKA.TTF”,60)# 華文行楷第24頁,共39頁。5.聲音播放播放聲音文件的常用代碼如下:Pygame.mixer.init( ) #初始化聲音設(shè)備Pygame.mixer.music.load(“filename.wav”) #打開聲音文件Pygame.mixer.music.play(1) #進(jìn)行播放(1遍)第25頁,共39頁。例13-1 在音樂聲中滾動的字幕 #Exp

14、13_1.py#coding=utf-8import pygamefrom pygame.locals import*pygame.init()font = pygame.font.SysFont(stcaiyun,60)text_surface=font.render(uabc123你好,True, (200,200,250)background_image_filename =火星11.jpgbackground = pygame.image.load(background_image_filename)第26頁,共39頁。#按圖像的寬、高創(chuàng)建一個(gè)窗口screen = pygame.dis

15、play.set_mode(int(background.get_width(),int(background.get_height(),0, 32)#設(shè)置窗口標(biāo)題pygame.display.set_caption(在音樂聲中滾動的字幕.)pygame.mixer.init()music_filenames=atime.wavpygame.mixer.music.load(music_filenames)pygame.mixer.music.play(1)x=1y=1dx=-2dy=-5flag=1第27頁,共39頁。while flag=1: for event in pygame.eve

16、nt.get(): if event.type = QUIT: #接收到關(guān)閉窗口事件后退出程序 pygame.quit() flag=-1 break if event.type=KEYDOWN and event.key=K_ESCAPE: #用戶按Esc鍵后退出程序 pygame.quit() flag=-1 break if flag=-1: break screen.blit(background, (0,0) 第28頁,共39頁。 x+=dx # 文字向左滾動 if x -text_surface.get_width(): x=background.get_width() press

17、ed_keys=pygame.key.get_pressed() # 這里獲取鍵盤的按鍵情況 pressed_mouse=pygame.mouse.get_pressed() # 這里獲取鼠標(biāo)的按鍵情況 if pressed_keysK_UP: # 上方向鍵按下,則文字向上移動dy y+=dy if pressed_keysK_DOWN: # 下方向鍵按下,則文字向下移動dy y-=dy第29頁,共39頁。 if pressed_mouse0: # 鼠標(biāo)左鍵盤按下,則改變文字的位置 x, y = pygame.mouse.get_pos() pygame.mixer.music.play(1)

18、 # 使音樂從頭播放 screen.blit(text_surface, (x, y) pygame.display.update()第30頁,共39頁。 第31頁,共39頁。13.3 游戲開發(fā)【例13-2】 被釣的魚。 游戲背景:讀過海明威的老人與海嗎?那條被老人釣到的大魚拖著小船在茫茫大海中游蕩了幾十個(gè)小時(shí),魚的那種掙扎、忽緊忽慢、若即若離的狀態(tài)給人留下了深刻的印象。本游戲就模擬這種場景,被釣到的魚圍繞鼠標(biāo)光標(biāo)忽緊忽慢地游動,但始終不能斷線而去。第32頁,共39頁。程序:#Exp13_2.pyimport pygameimport pygame._viewfrom pygame.local

19、s import *from Exp8_6 import Vector2import randombackground_image_filename=海底8.jpgsprite_image_filename=魚3.gif設(shè)置三個(gè)向量(對象):v1代表魚的位置向量,v2代表當(dāng)前鼠標(biāo)位置向量,v3代表魚到當(dāng)前鼠標(biāo)位置的向量。當(dāng)需要位置的時(shí)候,調(diào)用getpos()方法;運(yùn)算的時(shí)候,直接用向量第33頁,共39頁。pygame.init()background = pygame.image.load(background_image_filename)fish = pygame.image.load(s

20、prite_image_filename)w=int(fish.get_width()h=int(fish.get_height()#按圖片的寬、高創(chuàng)建一個(gè)窗口w2=int(background.get_width()h2=int(background.get_height()screen = pygame.display.set_mode(w2,h2),0, 32)#設(shè)置窗口標(biāo)題pygame.display.set_caption(被鉤住的魚.)#設(shè)置時(shí)鐘clock=pygame.time.Clock()第34頁,共39頁。#魚的初始位置設(shè)為畫面中心v1=Vector2(w2/2.0,h2/2.0) #零向量v3=Vector2()flag=1while flag=1: #退出代碼,略 #把背景圖畫上去 screen.blit(background, (0,0) #把魚畫上去 s

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論