




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 話杏企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報(bào)告
- 農(nóng)產(chǎn)品冷鏈物流企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報(bào)告
- 照相輔助器材批發(fā)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報(bào)告
- 營養(yǎng)食品企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 男式?jīng)鐾闲髽I(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 藍(lán)網(wǎng)布企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報(bào)告
- 房地產(chǎn)咨詢企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報(bào)告
- 借款合同設(shè)計(jì)要素
- 多功能家電采購合同
- 二零二五年度就業(yè)協(xié)議違約金賠償與就業(yè)權(quán)益維護(hù)協(xié)議
- 清華大學(xué)第二彈:DeepSeek賦能職場-從提示語技巧到多場景應(yīng)用
- 16J914-1 公用建筑衛(wèi)生間
- 高中地理 選擇性必修二 紐約的發(fā)展 紐約的輻射功能 城市的輻射功能 課件(第2課時(shí))
- 抽油井示功圖分析以及應(yīng)用
- 新藥發(fā)明簡史
- 高分子物理化學(xué)全套課件
- 【學(xué)海導(dǎo)航】2013屆高三物理一輪復(fù)習(xí) 第11章 第3節(jié) 電磁振蕩與電磁波 電磁波譜課件 新人教版
- 電工plc培訓(xùn)-技工技能類
- 電力系統(tǒng)碳排放流的計(jì)算方法初探_周天睿
- 長陽土家族自治縣骨干教師考核評價(jià)評分表(試行)
- 雨水泵站工程施工設(shè)計(jì)方案范文
評論
0/150
提交評論