版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
4.4綜合問(wèn)題的解決第4單元計(jì)算與問(wèn)題解決學(xué)習(xí)目標(biāo)2.體驗(yàn)軟件開(kāi)發(fā)的基本流程1.學(xué)會(huì)分析任務(wù),描述需求分析,知道需要解決問(wèn)題的關(guān)鍵點(diǎn)。pygame模塊的使用(重點(diǎn))過(guò)程設(shè)計(jì)中,事件代碼的理解及使用。(難點(diǎn))請(qǐng)同學(xué)們打開(kāi)光盤接福.py程序,體驗(yàn)并能說(shuō)出游戲的過(guò)程?;谛枨?,分解任務(wù)活動(dòng)1了解需求,分析問(wèn)題
通過(guò)剛才的游戲,我們知道游戲過(guò)程是通過(guò)單擊鼠標(biāo),接屏幕上不斷出現(xiàn)的福字,并根據(jù)成功接到福字的次數(shù)記錄分值。請(qǐng)同學(xué)們完成課本P108“接福”游戲描述。
需求分析是軟件工程中的一個(gè)關(guān)鍵過(guò)程。需求分析階段的任務(wù)是確定軟件系統(tǒng)的功能。通俗地說(shuō),就是確定需要計(jì)算機(jī)“做什么”,想達(dá)到什么樣的效果。只有在確定了這些需求后,才能夠分析和尋求系統(tǒng)的解決方法?;谛枨?,分解任務(wù)“接?!庇螒颍盒枰獙?dǎo)入的模塊有pygame、random、sys。其中,pygame模塊提供了圖像、聲音等函數(shù);random模塊用于產(chǎn)生隨機(jī)數(shù);sys模塊包含了跟Python環(huán)境相關(guān)的函數(shù)。pygame模塊
它是一個(gè)專門用來(lái)開(kāi)發(fā)游戲的模塊,可以包含圖像、聲音等。它的相關(guān)內(nèi)容主要有:模塊功能Pygame.display訪問(wèn)顯示設(shè)備Pygame.event管理事件Pygame.font使用字體Pygame.image加載和存儲(chǔ)圖片基于需求,分解任務(wù)活動(dòng)2分解任務(wù),設(shè)計(jì)流程
“接?!庇螒蛟O(shè)計(jì)的重難點(diǎn)是人機(jī)交互,即如何實(shí)時(shí)獲得鼠標(biāo)的狀態(tài)并對(duì)鼠標(biāo)單擊做出正確的響應(yīng)。也就是不斷地進(jìn)行監(jiān)聽(tīng)、更新游戲狀態(tài)、重繪屏幕三個(gè)步驟的操作?;谛枨螅纸馊蝿?wù)
通常情況下,游戲的基本結(jié)構(gòu)如圖所示。其中的事件主要指鼠標(biāo)事件、鍵盤事件等。
游戲狀態(tài)可以理解為程序中的變量值。隨著鼠標(biāo)單擊,游戲中的分?jǐn)?shù)需要更新,這種狀態(tài)隨著鼠標(biāo)單擊或鍵盤輸入等事件的發(fā)生而改變?;谛枨?,分解任務(wù)
游戲狀態(tài)通常隨事件的發(fā)生而改變,如鼠標(biāo)單擊、鍵盤輸入或者時(shí)間的流逝,游戲循環(huán)不停地檢查是否有新事件產(chǎn)生,并且會(huì)根據(jù)事件來(lái)更新游戲狀態(tài),這通常叫作事件處理。
隨著游戲狀態(tài)更新或游戲場(chǎng)景變化,屏幕上顯示的內(nèi)容也會(huì)相應(yīng)地發(fā)生改變。本游戲中福字在窗口隨機(jī)出現(xiàn),實(shí)際上就是顯示不同位置的福字。要達(dá)到這個(gè)效果,需要完成兩個(gè)步驟:(1)在新的位置上畫出圖像;(2)把原來(lái)的圖像擦掉。要“擦掉”某個(gè)圖像,可以選擇“覆蓋”它,通常采用重繪背景或者用其他對(duì)象來(lái)覆蓋的方式。在該游戲中,我們通過(guò)重繪背景來(lái)覆蓋前一個(gè)福字。基于需求,分解任務(wù)Pygame自帶了一個(gè)監(jiān)聽(tīng)類循環(huán),不斷檢查用戶的操作,這個(gè)循環(huán)在程序運(yùn)行過(guò)程期間持續(xù)工作。仔細(xì)閱讀理解如下代碼whileTrue:foreventinpygame.event.get():#監(jiān)聽(tīng)并獲取事件列表ifevent.type==pygame.QUIT:#Quit事件sys.exit()#退出程序
ifevent.type==pygame.MOUSEBUTTONDOWN:#偵聽(tīng)到鼠標(biāo)點(diǎn)擊事件……基于需求,分解任務(wù)本游戲中要用到的程序功能塊,包括游戲環(huán)境設(shè)置、繪制圖像、設(shè)置初始值等。請(qǐng)將主程序的各功能語(yǔ)句放到合適的位置,完善流程圖?;谛枨?,分解任務(wù)基于需求,分解任務(wù)
需求分析之后、程序設(shè)計(jì)之前,需要對(duì)系統(tǒng)進(jìn)行總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)。總體設(shè)計(jì)就是在需求分析的基礎(chǔ)上對(duì)模型細(xì)化、分解任務(wù),明確程序由哪些模塊組成。概括地說(shuō),就是系統(tǒng)應(yīng)該如何實(shí)現(xiàn)。詳細(xì)設(shè)計(jì)主要指界面設(shè)計(jì)、過(guò)程設(shè)計(jì)等。組裝程序,測(cè)試運(yùn)行
活動(dòng)1:界面設(shè)計(jì)1.創(chuàng)建程序窗口,設(shè)置背景。調(diào)用pygame.display.set_mode()函數(shù),將返回一個(gè)窗口。如果想在窗口上繪制或是放置對(duì)象,需要指定這個(gè)對(duì)象在窗口的具體位置即坐標(biāo)。pygame中的坐標(biāo)系原點(diǎn)在左上角,水平方向?yàn)閤軸,垂直方向?yàn)閥軸。在pygame中,使用圖像的最簡(jiǎn)單方法是調(diào)用image函數(shù)。通過(guò)pygame.image.load(filename)來(lái)載入圖片,filename表示圖像文件的路徑和名稱。圖像文件必須和程序在同一文件夾下才可以使用相對(duì)路徑的引用方式。
組裝程序,測(cè)試運(yùn)行根據(jù)以上分析完成“接?!庇螒虻慕缑嬖O(shè)計(jì)(1)顯示一個(gè)窗口
importpygame#導(dǎo)入模塊
pygame.init()
#pygame模塊初始化screen=pygame.display.set_mode([800,600])
#創(chuàng)建一個(gè)窗口screen,大小為800*600
(2)顯示一個(gè)有背景色的窗口
screen.fill((255,255,0))
#窗口填充黃色
*pygame.display.update()#窗口刷新(3)顯示一個(gè)有背景圖片的窗口
用下面兩條語(yǔ)句替換(2)代碼段中帶“*”號(hào)的語(yǔ)句
back=pygame.image.load('bj.jpg’)
#加載背景圖像screen.blit(back,[0,0])
#將背景圖畫在窗口運(yùn)行P111樣例程序,體驗(yàn)圖像文件的引用importpygame#導(dǎo)入模塊pygame.init()#pygame模塊初始化screen=pygame.display.set_mode([600,400])#創(chuàng)建窗口screen,大小800*600pygame.display.set_caption('實(shí)例')#設(shè)置屏幕標(biāo)題screen.fill((144,238,144))#窗口填充淡綠色img=pygame.image.load('ball.png')#載入ball.png圖像到內(nèi)存screen.blit(img,[200,200])#將圖像繪制在screen中,圖像的左上角在[200,200]pygame.display.update()#窗口刷新組裝程序,測(cè)試運(yùn)行
活動(dòng)1:界面設(shè)計(jì)
2.繪制福字。
在屏幕上出現(xiàn)福宇同祥可以使用以上在屏幕上繪制圖像的方法。為了便于游戲循環(huán)中反復(fù)調(diào)用,可以定義成一個(gè)函數(shù)showfu,在繪制福字時(shí),需要設(shè)置圖像顯示的位置,因此showfu中有兩個(gè)參數(shù),分別表示圖像位置的橫坐標(biāo)和縱坐標(biāo)。defshowfu(x,y):#定義函數(shù),在坐標(biāo)(x,y)上顯示圖像gift=pygame.image.load('fu.png')#加載福字圖像screen.blit(gift,[x,y])#顯示福字在實(shí)際使用中,只要提供一對(duì)坐標(biāo)值,就可以調(diào)用showfu了?;顒?dòng)1:界面設(shè)計(jì)
3.顯示得分。
方法為:先定義顯示字體,然后將score顯示出來(lái)。為了增加代碼的復(fù)用性,以便游戲循環(huán)中狀態(tài)更新時(shí)反復(fù)調(diào)用,可以定義成一個(gè)函數(shù)showscore。組裝程序,測(cè)試運(yùn)行defshowscore(score):#定義函數(shù),顯示分?jǐn)?shù)textfont=pygame.font.SysFont('Arial',30)#字體為Arial,大小30
#生成平滑的紅色字符串t=textfont.render('score:'+str(score),True,(255,0,0))screen.blit(t,[50,50])#在窗口顯示
活動(dòng)1:界面設(shè)計(jì)4.游戲狀態(tài)的更新和屏幕的重繪在pygame的游戲循環(huán)中,我們通過(guò)調(diào)用以下語(yǔ)句來(lái)完成游戲狀態(tài)的更新和屏幕的重繪,請(qǐng)?jiān)跈M線上注明各語(yǔ)句的功能。組裝程序,測(cè)試運(yùn)行screen.blit(back,[0,0])#
_
showscore(score)#
_x=random.randint(50,700)#
_
y=random.randint(50,500)#
_showfu(x,y)#
_pygame.display.update()#
_pygame.time.delay(800)#設(shè)置兩次顯示福字之間的延時(shí)活動(dòng)2:人機(jī)交互及程序拼裝人機(jī)交互主要體現(xiàn)在鼠標(biāo)上,需要獲取按鍵的情況,就要在監(jiān)聽(tīng)事件中增加相應(yīng)的判斷語(yǔ)句。打開(kāi)光盤中“接福,py”,找到相應(yīng)代碼,理解各句含義,在橫線上用自然語(yǔ)言描述對(duì)應(yīng)功能。ifevent.type==pygame.MOUSEBUTTONDOWN:##獲取鼠標(biāo)按下的坐標(biāo)并記錄在mousex,mousey中mousex,mousey=pygame.mouse.get_pos()#判斷鼠標(biāo)是否擊中福字,本例福字寬為60,高為70ifmousexinrange(x,x+60)andmouseyinrange(y,y+70):
score=score+5#
偵聽(tīng)到鼠標(biāo)點(diǎn)擊事件加分組裝程序,測(cè)試運(yùn)行總結(jié)組裝程序,測(cè)試運(yùn)行基于需求,分解任務(wù)跨平臺(tái)的Python模塊專為電子游戲開(kāi)發(fā)設(shè)計(jì)包含圖像、聲音等多種元素控制建立在SDL基礎(chǔ)上允許實(shí)時(shí)電子游戲研發(fā)不被低級(jí)語(yǔ)言束縛pygame.cdrom訪問(wèn)光驅(qū)pygame.color顏色pygame.cursors加載光標(biāo)pygame.display訪問(wèn)顯示設(shè)備pygame.draw繪制形狀、線和點(diǎn)pygame.event管理事件pygame.font使用字體pygame.image加載和存儲(chǔ)圖片pygame.joystick使用游戲手柄pygame.key讀取鍵盤按鍵pygame.mixer聲音pygame.movie播放視頻pygame.music播放音頻pygame.overlay訪問(wèn)高級(jí)視頻疊加pygame.rect管理矩形區(qū)域pygame.scrap本地剪貼板訪問(wèn)pygame.sndarray操作聲音數(shù)據(jù)pygame.sprite操作移動(dòng)圖像pygame.surface管理圖像和屏幕pygame.surfarray管理點(diǎn)陣圖像數(shù)據(jù)pygame.time管理時(shí)間和幀信息pygame.transform縮放和移動(dòng)圖像pygame.mouse鼠標(biāo)在控制面板的高級(jí)系統(tǒng)設(shè)置中點(diǎn)擊環(huán)境變量,找到path變量,在其末尾輸入本機(jī)安裝Python的路徑。例如:C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\Scripts或在安裝軟件時(shí),選擇“添加到路徑”打開(kāi)cmd輸入pipinstallpygame系統(tǒng)將自動(dòng)下載相應(yīng)的安裝包并自動(dòng)安裝。環(huán)境變量配置安裝pygame模塊開(kāi)始游戲編程23112安裝笑臉爆炸基本知識(shí)核心功能導(dǎo)入初始化加載圖片響應(yīng)點(diǎn)擊隨機(jī)大小反彈功能顯示設(shè)置事件處理圖片運(yùn)動(dòng)游戲循環(huán)游戲退出“畫點(diǎn)”importpygamepygame.init()screen=pygame.display.set_mode([800,600])pygame.display.set_caption("畫點(diǎn)")GREEN=(0,255,0)#RGB色彩模式,每段0~255radius=10keep_going=Truewhilekeep_going:foreventinpygame.event.get():
ifevent.type==pygame.QUIT:keep_going=Falsepygame.draw.circle(screen,GREEN,(100,100),radius)pygame.display.update()pygame.quit()#pygame.event.get()獲取用戶執(zhí)行事件列表,從而處理例如鼠標(biāo)點(diǎn)擊、按鍵、關(guān)閉等事件操作。#退出程序#繪制圓形#刷新顯示#設(shè)定窗口大小#設(shè)定窗口標(biāo)題#導(dǎo)入模塊#初始化“隨機(jī)彩點(diǎn)”importpygamepygame.init()screen=pygame.display.set_mode([800,600])pygame.display.set_caption("畫點(diǎn)")GREEN=(0,255,0)#RGB色彩模式,每段0~255radius=10keep_going=Truewhilekeep_going:foreventinpygame.event.get():
ifevent.type==pygame.QUIT:keep_going=Falsepygame.draw.circle(screen,GREEN,(100,100),radius)pygame.display.update()pygame.quit()COLOR=(int(random.random()*255),int(random.random()*255),int(random.random()*255))radius=random.randrange(1,10)(int(random.random()*800),int(random.random()*600))1“點(diǎn)擊繪點(diǎn)”importpygamepygame.init()screen=pygame.display.set_mode([800,600])pygame.display.set_caption("畫點(diǎn)")GREEN=(0,255,0)#RGB色彩模式,每段0~255radius=10keep_going=Truewhilekeep_going:foreventinpygame.event.get():
ifevent.type==pygame.QUIT:keep_going=Falsepygame.draw.circle(screen,GREEN,(100,100),radius)pygame.display.update()pygame.quit()2ifevent.type==pygame.MOUSEBUTTONDOWN:spot=event.pos#獲取鼠標(biāo)點(diǎn)擊位置pygame.draw.circle(screen,COLOR,spot,radius)“加載圖片”importpygamepygame.init()screen=pygame.display.set_mode([800,600])pygame.display.set_caption("畫點(diǎn)")GREEN=(0,255,0)#RGB色彩模式,每段0~255radius=10keep_going=Truewhilekeep_going:foreventinpygame.event.get():
ifevent.type==pygame.QUIT:keep_going=False
pygame.draw.circle(screen,GREEN,(100,100),radius)pygame.display.update()pygame.quit()3ifevent.type==pygame.MOUSEBUTTONDOWN:
spot=event.pos
screen.blit(pic,spot)pic=pygame.image.load("smile.png")
#圖片需要和文件在同一目錄#點(diǎn)擊畫笑臉(加載圖片),書(shū)寫時(shí)注意大小寫importpygame#導(dǎo)入模塊importrandompygame.init()#初始化screen=pygame.display.set_mode([800,600])pygame.display.set_caption("畫笑臉")pic=pygame.image.load("smile.png")#圖片需要和文件在同一目錄keep_going=Truewhilekeep_going:foreventinpygame.event.get():
ifevent.type==pygame.QUIT:keep_going=Falseifevent.type==pygame.MOUSEBUTTONDOWN:spot=event.pos#獲取鼠標(biāo)點(diǎn)擊位置
screen.blit(pic,spot)pygame.display.update()pygame.quit()笑臉爆炸笑臉爆炸基本知識(shí)核心功能導(dǎo)入初始化加載圖片響應(yīng)點(diǎn)擊隨機(jī)大小反彈功能顯示設(shè)置事件處理圖片運(yùn)動(dòng)游戲循環(huán)游戲退出彈球?速度與運(yùn)動(dòng)?位置參數(shù)、速度參數(shù)關(guān)鍵1反彈判斷關(guān)鍵2設(shè)計(jì)擋板對(duì)象關(guān)鍵3importpygame#導(dǎo)入模塊pygame.init()#初始化screen=pygame.display.set_mode([800,600])pygame.display.set_caption("彈球")keep_going=Truepic=pygame.image.load("ball.png")BLACK=(0,0,0)picx=0picy=0whilekeep_going:#Gameloopforeventinpygame.event.get():ifevent.type==pygame.QUIT:keep_going=False
picx+=1picy+=1
screen.fill(BLACK)#用來(lái)擦除之前繪制的圖形
screen.blit(pic,(picx,picy))pygame.display.update()pygame.quit()#如果圖片不透明要加上這兩句,以免邊角出現(xiàn)黑邊#colorkey=pic.get_at((0,0))#pic.set_colorket(colorkey)“運(yùn)動(dòng)小球”“時(shí)間控制”importpygame#導(dǎo)入模塊pygame.init()#初始化screen=pygame.display.set_mode([800,600])pygame.display.set_caption("彈球")keep_going=Truepic=pygame.image.load("ball.png")picx=0picy=0BLACK=(0,0,0)timer=pygame.time.Clock()#引入計(jì)時(shí)器whilekeep_going:#Gameloopforeventinpygame.event.get():ifevent.type==pygame.QUIT:keep_going=Falsepicx+=1picy+=1screen.fill(BLACK)screen.blit(pic,(picx,picy))pygame.display.update()
timer.tick(60)#每秒60幀pygame.quit()“反彈研究”speedxspeedy與左/右邊界接觸時(shí),speedx_____________,speedy_____________與上/下邊界接觸時(shí),speedx_____________,speedy_____________*(-1)不變*(-1)不變“反彈研究”importpygamepygame.init()screen=pygame.display.set_mode([800,600])pygame.display.set_caption("彈球")keep_going=Truepic=pygame.image.load("ball.png")picx=0picy=0BLACK=(0,0,0)timer=pygame.time.Clock()speedx=5speedy=5whilekeep_going:#Gameloopforeventinpygame.event.get():ifevent.type==pygame.QUIT:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江省哈爾濱市六校聯(lián)考2024-2025學(xué)年高二上學(xué)期1月期末考試語(yǔ)文試題(含解析)
- 考研《教育史(040103)》考前強(qiáng)化練習(xí)試題庫(kù)(含答案)
- 2025年陜西省職教高考《職測(cè)》核心考點(diǎn)必刷必練試題庫(kù)(含答案)
- 2025年曲靖醫(yī)學(xué)高等??茖W(xué)校高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 金庸小說(shuō)知識(shí)競(jìng)賽考試題庫(kù)及答案(含各題型)
- 2025高考物理一輪復(fù)習(xí)第35講拆2.光學(xué).含答案
- 10kV配電站房工程施工中的資源配置與協(xié)調(diào)
- 會(huì)議服務(wù)外包合同
- 執(zhí)行項(xiàng)目經(jīng)理聘任合同協(xié)議書(shū)范本
- 精裝商鋪?zhàn)赓U合同年
- 小學(xué)六年級(jí)數(shù)學(xué)上冊(cè)《簡(jiǎn)便計(jì)算》練習(xí)題(310題-附答案)
- 地理標(biāo)志培訓(xùn)課件
- 培訓(xùn)如何上好一堂課
- 人教版英語(yǔ)七年級(jí)上冊(cè)閱讀理解專項(xiàng)訓(xùn)練16篇(含答案)
- 死亡病例討論模板
- 畢業(yè)旅游活動(dòng)設(shè)計(jì)與實(shí)施方案
- 宜城安達(dá)特種水泥有限公司雙寨子礦區(qū)鋁土礦礦產(chǎn)資源開(kāi)發(fā)利用與生態(tài)復(fù)綠方案
- 面向機(jī)器人柔順操作的力位精準(zhǔn)控制方法
- 七年級(jí)下冊(cè)英語(yǔ)單詞默寫表直接打印
- 瓦斯防治八招培訓(xùn)課件
- 《他汀長(zhǎng)期治療》課件
評(píng)論
0/150
提交評(píng)論