版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
4.4綜合問題的解決第4單元計算與問題解決學(xué)習(xí)目標(biāo)2.體驗(yàn)軟件開發(fā)的基本流程1.學(xué)會分析任務(wù),描述需求分析,知道需要解決問題的關(guān)鍵點(diǎn)。pygame模塊的使用(重點(diǎn))過程設(shè)計中,事件代碼的理解及使用。(難點(diǎn))請同學(xué)們打開光盤接福.py程序,體驗(yàn)并能說出游戲的過程。基于需求,分解任務(wù)活動1了解需求,分析問題
通過剛才的游戲,我們知道游戲過程是通過單擊鼠標(biāo),接屏幕上不斷出現(xiàn)的福字,并根據(jù)成功接到福字的次數(shù)記錄分值。請同學(xué)們完成課本P108“接?!庇螒蛎枋?。
需求分析是軟件工程中的一個關(guān)鍵過程。需求分析階段的任務(wù)是確定軟件系統(tǒng)的功能。通俗地說,就是確定需要計算機(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模塊
它是一個專門用來開發(fā)游戲的模塊,可以包含圖像、聲音等。它的相關(guān)內(nèi)容主要有:模塊功能Pygame.display訪問顯示設(shè)備Pygame.event管理事件Pygame.font使用字體Pygame.image加載和存儲圖片基于需求,分解任務(wù)活動2分解任務(wù),設(shè)計流程
“接?!庇螒蛟O(shè)計的重難點(diǎn)是人機(jī)交互,即如何實(shí)時獲得鼠標(biāo)的狀態(tài)并對鼠標(biāo)單擊做出正確的響應(yīng)。也就是不斷地進(jìn)行監(jiān)聽、更新游戲狀態(tài)、重繪屏幕三個步驟的操作?;谛枨?,分解任務(wù)
通常情況下,游戲的基本結(jié)構(gòu)如圖所示。其中的事件主要指鼠標(biāo)事件、鍵盤事件等。
游戲狀態(tài)可以理解為程序中的變量值。隨著鼠標(biāo)單擊,游戲中的分?jǐn)?shù)需要更新,這種狀態(tài)隨著鼠標(biāo)單擊或鍵盤輸入等事件的發(fā)生而改變?;谛枨?,分解任務(wù)
游戲狀態(tài)通常隨事件的發(fā)生而改變,如鼠標(biāo)單擊、鍵盤輸入或者時間的流逝,游戲循環(huán)不停地檢查是否有新事件產(chǎn)生,并且會根據(jù)事件來更新游戲狀態(tài),這通常叫作事件處理。
隨著游戲狀態(tài)更新或游戲場景變化,屏幕上顯示的內(nèi)容也會相應(yīng)地發(fā)生改變。本游戲中福字在窗口隨機(jī)出現(xiàn),實(shí)際上就是顯示不同位置的福字。要達(dá)到這個效果,需要完成兩個步驟:(1)在新的位置上畫出圖像;(2)把原來的圖像擦掉。要“擦掉”某個圖像,可以選擇“覆蓋”它,通常采用重繪背景或者用其他對象來覆蓋的方式。在該游戲中,我們通過重繪背景來覆蓋前一個福字?;谛枨?,分解任務(wù)Pygame自帶了一個監(jiān)聽類循環(huán),不斷檢查用戶的操作,這個循環(huán)在程序運(yùn)行過程期間持續(xù)工作。仔細(xì)閱讀理解如下代碼whileTrue:foreventinpygame.event.get():#監(jiān)聽并獲取事件列表ifevent.type==pygame.QUIT:#Quit事件sys.exit()#退出程序
ifevent.type==pygame.MOUSEBUTTONDOWN:#偵聽到鼠標(biāo)點(diǎn)擊事件……基于需求,分解任務(wù)本游戲中要用到的程序功能塊,包括游戲環(huán)境設(shè)置、繪制圖像、設(shè)置初始值等。請將主程序的各功能語句放到合適的位置,完善流程圖。基于需求,分解任務(wù)基于需求,分解任務(wù)
需求分析之后、程序設(shè)計之前,需要對系統(tǒng)進(jìn)行總體設(shè)計和詳細(xì)設(shè)計??傮w設(shè)計就是在需求分析的基礎(chǔ)上對模型細(xì)化、分解任務(wù),明確程序由哪些模塊組成。概括地說,就是系統(tǒng)應(yīng)該如何實(shí)現(xiàn)。詳細(xì)設(shè)計主要指界面設(shè)計、過程設(shè)計等。組裝程序,測試運(yùn)行
活動1:界面設(shè)計1.創(chuàng)建程序窗口,設(shè)置背景。調(diào)用pygame.display.set_mode()函數(shù),將返回一個窗口。如果想在窗口上繪制或是放置對象,需要指定這個對象在窗口的具體位置即坐標(biāo)。pygame中的坐標(biāo)系原點(diǎn)在左上角,水平方向?yàn)閤軸,垂直方向?yàn)閥軸。在pygame中,使用圖像的最簡單方法是調(diào)用image函數(shù)。通過pygame.image.load(filename)來載入圖片,filename表示圖像文件的路徑和名稱。圖像文件必須和程序在同一文件夾下才可以使用相對路徑的引用方式。
組裝程序,測試運(yùn)行根據(jù)以上分析完成“接?!庇螒虻慕缑嬖O(shè)計(1)顯示一個窗口
importpygame#導(dǎo)入模塊
pygame.init()
#pygame模塊初始化screen=pygame.display.set_mode([800,600])
#創(chuàng)建一個窗口screen,大小為800*600
(2)顯示一個有背景色的窗口
screen.fill((255,255,0))
#窗口填充黃色
*pygame.display.update()#窗口刷新(3)顯示一個有背景圖片的窗口
用下面兩條語句替換(2)代碼段中帶“*”號的語句
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()#窗口刷新組裝程序,測試運(yùn)行
活動1:界面設(shè)計
2.繪制福字。
在屏幕上出現(xiàn)福宇同祥可以使用以上在屏幕上繪制圖像的方法。為了便于游戲循環(huán)中反復(fù)調(diào)用,可以定義成一個函數(shù)showfu,在繪制福字時,需要設(shè)置圖像顯示的位置,因此showfu中有兩個參數(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í)際使用中,只要提供一對坐標(biāo)值,就可以調(diào)用showfu了?;顒?:界面設(shè)計
3.顯示得分。
方法為:先定義顯示字體,然后將score顯示出來。為了增加代碼的復(fù)用性,以便游戲循環(huán)中狀態(tài)更新時反復(fù)調(diào)用,可以定義成一個函數(shù)showscore。組裝程序,測試運(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])#在窗口顯示
活動1:界面設(shè)計4.游戲狀態(tài)的更新和屏幕的重繪在pygame的游戲循環(huán)中,我們通過調(diào)用以下語句來完成游戲狀態(tài)的更新和屏幕的重繪,請?jiān)跈M線上注明各語句的功能。組裝程序,測試運(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è)置兩次顯示福字之間的延時活動2:人機(jī)交互及程序拼裝人機(jī)交互主要體現(xiàn)在鼠標(biāo)上,需要獲取按鍵的情況,就要在監(jiān)聽事件中增加相應(yīng)的判斷語句。打開光盤中“接福,py”,找到相應(yīng)代碼,理解各句含義,在橫線上用自然語言描述對應(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#
偵聽到鼠標(biāo)點(diǎn)擊事件加分組裝程序,測試運(yùn)行總結(jié)組裝程序,測試運(yùn)行基于需求,分解任務(wù)跨平臺的Python模塊專為電子游戲開發(fā)設(shè)計包含圖像、聲音等多種元素控制建立在SDL基礎(chǔ)上允許實(shí)時電子游戲研發(fā)不被低級語言束縛pygame.cdrom訪問光驅(qū)pygame.color顏色pygame.cursors加載光標(biāo)pygame.display訪問顯示設(shè)備pygame.draw繪制形狀、線和點(diǎn)pygame.event管理事件pygame.font使用字體pygame.image加載和存儲圖片pygame.joystick使用游戲手柄pygame.key讀取鍵盤按鍵pygame.mixer聲音pygame.movie播放視頻pygame.music播放音頻pygame.overlay訪問高級視頻疊加pygame.rect管理矩形區(qū)域pygame.scrap本地剪貼板訪問pygame.sndarray操作聲音數(shù)據(jù)pygame.sprite操作移動圖像pygame.surface管理圖像和屏幕pygame.surfarray管理點(diǎn)陣圖像數(shù)據(jù)pygame.time管理時間和幀信息pygame.transform縮放和移動圖像pygame.mouse鼠標(biāo)在控制面板的高級系統(tǒng)設(shè)置中點(diǎn)擊環(huán)境變量,找到path變量,在其末尾輸入本機(jī)安裝Python的路徑。例如:C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\Scripts或在安裝軟件時,選擇“添加到路徑”打開cmd輸入pipinstallpygame系統(tǒng)將自動下載相應(yīng)的安裝包并自動安裝。環(huán)境變量配置安裝pygame模塊開始游戲編程23112安裝笑臉爆炸基本知識核心功能導(dǎo)入初始化加載圖片響應(yīng)點(diǎn)擊隨機(jī)大小反彈功能顯示設(shè)置事件處理圖片運(yùn)動游戲循環(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)擊畫笑臉(加載圖片),書寫時注意大小寫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()笑臉爆炸笑臉爆炸基本知識核心功能導(dǎo)入初始化加載圖片響應(yīng)點(diǎn)擊隨機(jī)大小反彈功能顯示設(shè)置事件處理圖片運(yùn)動游戲循環(huán)游戲退出彈球?速度與運(yùn)動?位置參數(shù)、速度參數(shù)關(guān)鍵1反彈判斷關(guān)鍵2設(shè)計擋板對象關(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)#用來擦除之前繪制的圖形
screen.blit(pic,(picx,picy))pygame.display.update()pygame.quit()#如果圖片不透明要加上這兩句,以免邊角出現(xiàn)黑邊#colorkey=pic.get_at((0,0))#pic.set_colorket(colorkey)“運(yùn)動小球”“時間控制”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()#引入計時器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與左/右邊界接觸時,speedx_____________,speedy_____________與上/下邊界接觸時,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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度主題餐廳加盟合作協(xié)議4篇
- 二零二五年度牙科診所安全設(shè)施建設(shè)承包合同3篇
- 2025至2030年可控硅式逆變焊機(jī)項(xiàng)目投資價值分析報告
- 2025年布棉鞋項(xiàng)目可行性研究報告
- 2025年出入口復(fù)蓋項(xiàng)目可行性研究報告
- 2025至2030年鍍鎳鋁塑管角彎項(xiàng)目投資價值分析報告
- 二年級數(shù)學(xué)(上)計算題專項(xiàng)練習(xí)匯編
- 三年級數(shù)學(xué)(上)計算題專項(xiàng)練習(xí)附答案集錦
- 一年級數(shù)學(xué)(上)計算題專項(xiàng)練習(xí)集錦
- 展會物流服務(wù)合同模板
- 刀模檢測、保養(yǎng)記錄
- 小學(xué)五年級脫式計算題300道-五年級上冊脫式計算題及答案
- 鋁礬土進(jìn)口合同中英文
- 最新臺灣藥事法
- 2022年金礦采選項(xiàng)目可行性研究報告
- 氧氣吸入法操作并發(fā)癥預(yù)防及處理規(guī)范草稿
- 2022版云南財經(jīng)大學(xué)推免管理辦法
- 門診特定病種待遇認(rèn)定申請表
- 混合離子交換器使用說明書正本
- 工傷保險待遇及案例分析PPT課件
- 自控工程識圖
評論
0/150
提交評論