




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第1313章章游游 戲戲 開開 發(fā)發(fā)主要內(nèi)容1. 圖形化的問候問題2. Pygame基礎(chǔ)知識(shí) 3. Pygame基礎(chǔ)知識(shí)應(yīng)用1.圖形化的問候問題初學(xué)者編寫的第一個(gè)程序往往是顯示問候語“Hello World!”,那么初學(xué)游戲開發(fā)的能不能用漂亮的圖形進(jìn)行問候呢?【問題13-1】小游戲,讓鷹隨鼠標(biāo)移動(dòng)。分析需要載入鷹的圖片,背景圖片,需要建立窗口,要讓鷹隨鼠標(biāo)移動(dòng)需要管理鼠標(biāo)事件,這些都能用Pygame做到。框圖#Ques13_1.py#導(dǎo)入pygame庫(kù)import pygame#導(dǎo)入一些常用的函數(shù)和常量from pygame.locals import *#指定圖像文件名稱backgroun
2、d_image_filename =火星12.jpg#火星的紋路沙丘.jpgmouse_image_filename =鷹3.gif #butterfly3.gif#初始化pygame,為使用硬件做準(zhǔn)備 pygame.init()#加載圖像background =pygame.image.load(background_image_filename)mouse_cursor = pygame.image.load(mouse_image_filename)#按圖像的寬、高創(chuàng)建一個(gè)窗口screen = pygame.display.set_mode(int(background.get_widt
3、h(),int(background.get_height(),0, 32)#設(shè)置窗口標(biāo)題pygame.display.set_caption(Hello,World! From pygame)pygame.mouse.set_visible(False) 圖13-2 鷹在火星的干冰跡上空飛翔2. pygame基礎(chǔ)知識(shí)Pygame是建立在SDL的基礎(chǔ)之上的軟件包。SDL提供了一種簡(jiǎn)單的方式控制媒體信息,而且能夠跨平臺(tái)使用。Pygame是跨平臺(tái)Python模塊,專為電子游戲設(shè)計(jì),包含圖像、聲音。由于Pygame和SDL是開源的,所以一大批游戲開發(fā)者不斷地對(duì)它們進(jìn)行了完善和增強(qiáng)。 Pygame的安
4、裝下載:檢驗(yàn)是否安裝成功: import pygame print pygame.ver如果安裝成功,則會(huì)顯示pygame的版本號(hào)。Pygame的模塊Pygame模塊會(huì)自動(dòng)導(dǎo)入其他Pygame模塊。所以如果在程序的首部放置了import pyagme語句的話,就能自動(dòng)訪問其他的模塊了。init()函數(shù)是Pygame游戲的核心。必須在進(jìn)入游戲主循環(huán)之前調(diào)用。這個(gè)函數(shù)會(huì)自動(dòng)初始化其他所有模塊,它載入驅(qū)動(dòng)和硬件請(qǐng)求,游戲程序才可以使用計(jì)算機(jī)上的所有設(shè)備。然而初始化時(shí)間比較長(zhǎng),如果只是使用少量模塊,應(yīng)該分別初始化這些模塊一節(jié)省時(shí)間。注意:由于硬件和游戲的兼容性或是請(qǐng)求的驅(qū)動(dòng)
5、沒有安裝的問題,并不是所有的模塊都可以在所有平臺(tái)使用。測(cè)試字體是否載入: if pygame.font is None: Print The font is not available ! Pygame.quit()如果沒有則退出pygame的應(yīng)用環(huán)境1、Surface Surface()函數(shù)的一般格式為: Pygame.surface(width, height), flags=0, depth=0, masks=none) 它返回一個(gè)新的surface對(duì)象。這里的surface對(duì)象是一個(gè)有確定尺寸的空?qǐng)D像,可以用它來進(jìn)行圖像繪制與移動(dòng)。2、Locals Locals模塊中定義了pygame
6、環(huán)境中用到的各種常量,而且包括事件類型,鍵和視頻模式等的名字。在導(dǎo)入所有內(nèi)容時(shí)用起來是很安全的。如果知道需要的內(nèi)容,也可以導(dǎo)入具體的內(nèi)容(比如:from pygame.locals import FULLSCREEN)。常用模塊簡(jiǎn)要說明:3、Display 處理pygame顯示方式的函數(shù),其中包括普通窗口和 全屏模式。 程序通常需要下面的函數(shù): flip / update 更新顯示。 set_mode 建立游戲窗口,有三個(gè)參數(shù),指定窗口尺 寸,對(duì)屏幕進(jìn)行設(shè)置,制定窗口的色彩位數(shù)。 set_caption 設(shè)定程序標(biāo)題。 get_surface 返回一個(gè)可用來畫圖的surface圖像。4、Fon
7、t 字體font模塊用于表現(xiàn)不同字體,可以用于文本 5、Sprite Sprite模塊有兩個(gè)非常重要的類:sprite和group。Sprite類是所有可視游戲的基類。為了實(shí)現(xiàn)自己的游戲?qū)ο?,需要子類化sprite,覆蓋它的構(gòu)造函數(shù)以設(shè)定imge和rect屬性,再覆蓋update()方法。在sprite需要跟新的時(shí)候可以調(diào)用。 Groug類的實(shí)例用作sprite對(duì)象的容器。在一些簡(jiǎn)單的游戲中,只要?jiǎng)?chuàng)建名為sprite或是allsprite或是其他類似的組,然后將所有sprite對(duì)象添加到上面即可。6、Mouse 用來管理鼠標(biāo)。 Pygame. Mouse. Set_visible(false
8、/ true) 隱藏/ 顯示鼠標(biāo)光標(biāo) Pygame. Mouse. get_pos( ) 獲取鼠標(biāo)位置7、Event Event模塊會(huì)追蹤鼠標(biāo)單擊、鼠標(biāo)移動(dòng)、按鍵按下和釋放等事件。 Pygame. Event. Get () 可以獲取最近事件列表。8、Image 這個(gè)模塊用于處理保存在GIF、PNG或者JPEG內(nèi)的圖形??捎胠oad()函數(shù)來讀取圖像文件。 13.2.3 pygame 的使用1.用pygame開發(fā)程序的主要流程 基礎(chǔ)是創(chuàng)建游戲窗口 核心是處理時(shí)間、更新游戲狀態(tài)和在屏幕上繪圖。 游戲狀態(tài):為程序中所有變量的值的集合,在有些游戲中,游戲狀態(tài)包括存放人物健康和位置的變量,物體或圖形位
9、置的變化,這些值可以在屏幕中顯示。 物體或圖形位置的變化只有通過在屏幕上繪圖才能看出來2.鼠標(biāo)按鍵處理 通過鼠標(biāo)事件處理來決定游戲的開始和結(jié)束、某些狀態(tài)的變化。常用處理代碼如下: pressed_mouse=pygame.mouse.get_pressed() #獲得鼠標(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)位置3.鍵盤事件處理 通過鍵盤事件處理同
10、樣可以決定游戲的開始和結(jié)束、某些狀態(tài)的變化。常用的處理代碼如下: pressed_keys=pygame.key.get_pressed() rotation_direction=+1 if pressed_keysK_RIGHT: #右方向鍵按下的處理 rotation_direction=-1 if pressed_keysK_UP: #上方向鍵按下的處理 movement_direction=+1 if pressed_keysK_DOWN: #下方向鍵按下的處理 movement_direction=-14.字體的使用 使用字體可以在游戲窗口上顯示不同字體的文字。 使用字體的常用代碼如
11、下: font=pygame.font.SysFont(stcaiyun,120) #獲取字體對(duì)象 text_surface=font.render(u”abc123 你好”,Ture, (0,125,255) #生成文本的surface screen.blit(text_surface,(x,y) #在坐標(biāo)點(diǎn)(x,y)顯示文字 獲取字體對(duì)象是關(guān)鍵的一步,如果獲取失敗,將無法顯示漢字。獲取字體對(duì)象可以通過字體名稱獲取,如上面代碼??捎孟旅娲a查看機(jī)器中的字體名稱: f2=pygame.font.get_fonts()_ f2.sort() f2 會(huì)顯示出很多字體名稱,很多是不能用的,某機(jī)器(w
12、indow7,64位)可用的字體名稱如下:simhei,simsunnsimsun,stcaiyun,stencil,stfangsong,sthupostkaiti,stliti,stsong,stxihei,stxingkai,stxinwei,stzhongsong 通過字體文件名來獲得字體對(duì)象,這需要知道字體文件的路徑,如Font=pygame.font.Font(“C:/Windows/Fonts/STXINGKA.TTF”,60)# 華文行楷5.聲音播放播放聲音文件的常用代碼如下:Pygame.mixer.init( ) #初始化聲音設(shè)備Pygame.mixer.music.loa
13、d(“filename.wav”) #打開聲音文件Pygame.mixer.music.play(1) #進(jìn)行播放(1遍)例13-1 在音樂聲中滾動(dòng)的字幕 #Exp13_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 = pygam
14、e.image.load(background_image_filename)#按圖像的寬、高創(chuàng)建一個(gè)窗口screen = pygame.display.set_mode(int(background.get_width(),int(background.get_height(),0, 32)#設(shè)置窗口標(biāo)題pygame.display.set_caption(在音樂聲中滾動(dòng)的字幕.)pygame.mixer.init()music_filenames=atime.wavpygame.mixer.music.load(music_filenames)pygame.mixer.music.play
15、(1)x=1y=1dx=-2dy=-5flag=1while flag=1: for event in pygame.event.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) x+=dx # 文字向左滾動(dòng) if x -text_
16、surface.get_width(): x=background.get_width() pressed_keys=pygame.key.get_pressed() # 這里獲取鍵盤的按鍵情況 pressed_mouse=pygame.mouse.get_pressed() # 這里獲取鼠標(biāo)的按鍵情況 if pressed_keysK_UP: # 上方向鍵按下,則文字向上移動(dòng)dy y+=dy if pressed_keysK_DOWN: # 下方向鍵按下,則文字向下移動(dòng)dy y-=dy if pressed_mouse0: # 鼠標(biāo)左鍵盤按下,則改變文字的位置 x, y = pygame.m
17、ouse.get_pos() pygame.mixer.music.play(1) # 使音樂從頭播放 screen.blit(text_surface, (x, y) pygame.display.update() 13.3 游戲開發(fā)【例13-2】 被釣的魚。 游戲背景:讀過海明威的老人與海嗎?那條被老人釣到的大魚拖著小船在茫茫大海中游蕩了幾十個(gè)小時(shí),魚的那種掙扎、忽緊忽慢、若即若離的狀態(tài)給人留下了深刻的印象。本游戲就模擬這種場(chǎng)景,被釣到的魚圍繞鼠標(biāo)光標(biāo)忽緊忽慢地游動(dòng),但始終不能斷線而去。程序:#Exp13_2.pyimport pygameimport pygame._viewfrom p
18、ygame.locals import *from Exp8_6 import Vector2import randombackground_image_filename=海底8.jpgsprite_image_filename=魚3.gif設(shè)置三個(gè)向量(對(duì)象):v1代表魚的位置向量,v2代表當(dāng)前鼠標(biāo)位置向量,v3代表魚到當(dāng)前鼠標(biāo)位置的向量。當(dāng)需要位置的時(shí)候,調(diào)用getpos()方法;運(yùn)算的時(shí)候,直接用向量pygame.init()background = pygame.image.load(background_image_filename)fish = pygame.image.load(
19、sprite_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()#魚的初始位置設(shè)為畫面中心v1=Vector2(w2/2.0,h2/2.0) #零向量v3=Vector2()flag=1while flag=1: #退出代碼,略 #把背景圖畫上去 screen.blit(background,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人物形象塑造與刻畫作文(7篇)
- ××超市薪酬管理細(xì)則
- ××中學(xué)保安巡邏記錄存檔制度
- 某商超資源教室規(guī)定
- 2025年電工(初級(jí))職業(yè)技能鑒定實(shí)操試卷:電氣設(shè)備安全操作案例分析
- 物業(yè)智能服務(wù)外包協(xié)議
- 2025年勞動(dòng)關(guān)系協(xié)調(diào)員(中級(jí))考試試卷:勞動(dòng)關(guān)系協(xié)調(diào)法律法規(guī)應(yīng)用與案例分析
- 2025年電梯檢驗(yàn)員資格考試試卷:電梯事故案例分析試題
- 廣告公司服務(wù)范圍及費(fèi)用支付協(xié)議
- 2025年阿拉伯語水平測(cè)試經(jīng)典試題模擬試卷
- 人體解剖學(xué)章節(jié)練習(xí)題及復(fù)習(xí)資料(同步)
- 糖尿病老年人飲食護(hù)理
- 解憂雜貨鋪ppt讀書分享
- 銀行對(duì)公業(yè)務(wù)培訓(xùn)課件
- 玻璃粉生產(chǎn)工藝
- 高處墜落及應(yīng)急救援培訓(xùn)考試試題及答案
- 金川公司社會(huì)招聘考試題
- 高中地理100個(gè)答題模板
- 信息安全、網(wǎng)絡(luò)安全和隱私保護(hù)-信息安全控制風(fēng)險(xiǎn)清單(雷澤佳編制2024A0)
- 農(nóng)村財(cái)會(huì)培訓(xùn)課件
- 社區(qū)超市食品安全管理培訓(xùn)
評(píng)論
0/150
提交評(píng)論