版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
實驗塔防式游戲詳細(xì)設(shè)計之一一、實驗?zāi)康亩?、實驗要求三、實驗設(shè)備計算機、Python2.7、Pygame1.9.2四、實驗內(nèi)容一、創(chuàng)立游戲場景和卡通人物#1-Importlibraryimportpygamefrompygame.localsimport*#2–初始化游戲場景,即根本畫布pygame.init()width,height=640,480screen=pygame.display.set_mode((width,height))#3–通過裝載圖像的方式畫出一個卡通人物player=pygame.image.load("resources/images/dude.png")#4–游戲的主循環(huán)while1:
#5-clearthescreenbeforedrawingitagain
screen.fill(0)
#6-drawthescreenelements
screen.blit(player,(100,100))
#7-updatethescreen
pygame.display.flip()
#8–主循環(huán)中的事件循環(huán)
foreventinpygame.event.get():
#checkiftheeventistheXbutton
ifevent.type==pygame.QUIT:
#ifitisquitthegame
pygame.quit()
exit(0)代碼解釋:導(dǎo)入pygame庫,這一步能讓你使用庫里提供的功能初始化pygame,設(shè)置展示窗口加載作為兔子的圖片不停地循環(huán)執(zhí)行接下來的局部在給屏幕畫任何東西之前用黑色進行填充在屏幕的〔100,100〕坐標(biāo)出添加你加載的兔子圖片更新屏幕檢查一些新的事件,如果有退出命令,那么終止程序的執(zhí)行。二、豐富場景在#3的結(jié)尾處,在添加玩家圖片的后面,加上以下的代碼:12grass=pygame.image.load("resources/images/grass.png")castle=pygame.image.load("resources/images/castle.png")這段代碼加載圖片并將它們放在變量里。現(xiàn)在它們需要被畫在屏幕上。但是當(dāng)你檢查了草的圖片后,發(fā)現(xiàn)它不會覆蓋整個屏幕,它的分辨率是640x480。添加到game.py里#6的代碼:1234567forxinrange(width/grass.get_width()+1):
foryinrange(height/grass.get_height()+1):
screen.blit(grass,(x*100,y*100))screen.blit(castle,(0,30))screen.blit(castle,(0,135))screen.blit(castle,(0,240))screen.blit(castle,(0,345))三、互動元素設(shè)計接下來你需要加上一些真正的游戲的元素了,比方讓兔子能夠隨著按鍵移動。為了做到這一點,首先,你需要實現(xiàn)一個方法,用來記錄在某一時刻那個鍵被按下??梢酝ㄟ^新建一個按鍵狀態(tài)的隊列來存放每個你想在游戲里用到的按鍵。把以下代碼參加到game.py里#2后面:12keys=[False,False,False,False]playerpos=[100,100]這段代碼是不言自明的,key這個隊列用來記錄幾個按鍵的情況:W、A、S、D。隊列中的每一項對應(yīng)一個按鍵——第一個對應(yīng)W,第二個對應(yīng)A等等。playerpos這個變量表示程序畫出玩家的位置。因為這個游戲會讓玩家向不同的方向移動,用一個變量來表示玩家的位置并且能夠依據(jù)這個變量將玩家畫出來的方案是非常適合的?,F(xiàn)在你需要修改現(xiàn)在畫出玩家的代碼,需要用上playerpos變量。把#6局部的代碼進行修改:從1screen.blit(player,(100,100))改成:1screen.blit(player,playerpos)在#8的結(jié)尾,就在event.py==pygame.QUIT后面,添加一下的代碼〔與pygame.QUIT保持同級別縮進〕:123456789101112131415161718ifevent.type==pygame.KEYDOWN:
ifevent.key==K_w:
keys[0]=True
elifevent.key==K_a:
keys[1]=True
elifevent.key==K_s:
keys[2]=True
elifevent.key==K_d:
keys[3]=Trueifevent.type==pygame.KEYUP:
ifevent.key==pygame.K_w:
keys[0]=False
elifevent.key==pygame.K_a:
keys[1]=False
elifevent.key==pygame.K_s:
keys[2]=False
elifevent.key==pygame.K_d:
keys[3]=False首先,你檢查是否有一個鍵被按下或放開。然后,檢查是哪一個鍵被按下或放開了,如果被按下或放開的鍵是你使用的,你就更新記錄按鍵的變量。最終,你需要更新playerpos變量〔兔子的當(dāng)前位置〕作為按鍵后的反響。這實際上是非常簡單的。在8#代碼區(qū)后面添加兔子移動的步長:#9-Moveplayerifkeys[0]:playerpos[1]-=5elifkeys[2]:playerpos[1]+=5ifkeys[1]:playerpos[0]-=5elifkeys[3]:playerpos[0]+=5四、控制鼠標(biāo)操作精靈好的,現(xiàn)在你的兔子在你按鍵的時候可以移動了,但是如果你能用鼠標(biāo)讓兔子朝向你選擇的方向不是更酷嗎?這樣它就不會總是朝向一個方向了。用三角定理實現(xiàn)它會非常簡單??匆幌孪旅娴牟鍒D:在上圖中,如果〔5,3〕是兔子的位置,〔2,4〕是現(xiàn)在鼠標(biāo)的位置,你可以通過三角定理來得出需要旋轉(zhuǎn)的角度。然后,你知道了旋轉(zhuǎn)的角度后,以就可以來旋轉(zhuǎn)你的兔子了。如果你對這局部感到有點疑惑,不要擔(dān)憂——這沒有關(guān)系。但這是你為什么需要在數(shù)學(xué)課上集中精力的原因。在游戲編程中會用得到它的?,F(xiàn)在,你需要接受你的游戲里的概念。為了實現(xiàn)它,你可以使用PyGameSurface.rotate(degrees)函數(shù)。atatn2函數(shù)是來自Python的math庫。所以把以下代碼加到#1局部:1importmath然后,把#6局部的最后一行用一下代碼替換:123456#6.1-Setplayerpositionandrotationposition=pygame.mouse.get_pos()angle=math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26))playerrot=pygame.transform.rotate(player,360-angle*57.29)playerpos1=(playerpos[0]-playerrot.get_rect().width/2,playerpos[1]-playerrot.get_rect().height/2)screen.blit(playerrot,playerpos1)我們來瀏覽一下以上代碼的根本結(jié)構(gòu)。首先獲取鼠標(biāo)和玩家的位置。然后將它們使用atan2函數(shù)。然后,獲取通過atan2函數(shù)得出的角度和弧度。當(dāng)兔子被旋轉(zhuǎn)的時候,它的位置將會改變。所以你需要計算兔子新的位置,然后將其在屏幕上顯示出來。再次運行游戲,如果你只是按WASD這幾個鍵,那么這個游戲跟以前還是一樣的。但是如果你移動鼠標(biāo),兔子也開始旋轉(zhuǎn)了,相當(dāng)酷!五增加攻擊能力現(xiàn)在你的兔子可以四處移動了,是時候來添加更多的功能了。讓兔子用箭頭射向它們的敵人怎么樣?這一步會有一點復(fù)雜,因為你需要跟蹤所有的箭頭,更新它們,旋轉(zhuǎn)它們,在它們跑出屏幕的時候刪除它們。首先,在#2聲明的局部加上必要的變量的聲明。12acc=[0,0]arrows=[]第一個變量會跟蹤玩家的精度,第二個變量會跟蹤箭頭。這個精度的變量本質(zhì)上是一個數(shù)字組成的列表,記錄了射出的箭頭數(shù)和被擊中的獾的數(shù)量。之后我們會用到這些信息用來計算射擊精確度。接下來,在#3局部結(jié)尾加載箭頭的圖片。1arrow=pygame.image.load("resources/images/bullet.png")現(xiàn)在,當(dāng)玩家點擊鼠標(biāo),就需要射出一支箭頭。在#8局部加上以下代碼:1234ifevent.type==pygame.MOUSEBUTTONDOWN:
position=pygame.mouse.get_pos()
acc[1]+=1
arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32])這段代碼會檢查是否鼠標(biāo)被點擊了,如果點擊了,它就會得到鼠標(biāo)的位置并且根據(jù)玩家和光標(biāo)的位置計算出箭頭旋轉(zhuǎn)角度。旋轉(zhuǎn)角度的值存放在arrows這個數(shù)組里。接下來,你需要真的在屏幕上畫出箭頭來。在#6局部加上以下代碼:12345678910111213#6.2-Drawarrowsforbulletinarrows:
index=0
velx=math.cos(bullet[0])*10
vely=math.sin(bullet[0])*10
bullet[1]+=velx
bullet[2]+=vely
ifbullet[1]<-64orbullet[1]>640orbullet[2]<-64orbullet[2]>480:
arrows.pop(index)
index+=1
forprojectileinarrows:
arrow1=pygame.transform.rotate(arrow,360-projectile[0]*57.29)
screen.blit(arrow1,(projectile[1],projectile[2]))vely和velx的值是根據(jù)三角定理算出來的。10是箭頭的速度。if表達式是檢查箭頭是否超出了屏幕范圍,如果超出,就刪除這個箭頭。第二個for表達式是循環(huán)來把箭頭根據(jù)相應(yīng)的旋轉(zhuǎn)畫出來。試著運行游戲。當(dāng)你點擊鼠標(biāo)時,你的兔子就可以射出剪頭了:D六、增加游戲的反派精靈好吧,現(xiàn)在有了城堡,并且你有一個英雄可以移動和射出箭頭。還差什么呢?攻擊城堡的敵人可以被英雄用箭頭射了!在這一步,你將會隨機創(chuàng)立出一些獾沖向城堡。在游戲的進程中會有越來越多的獾冒出來。所以,我們來列個接下來要做的事情的清單。添加一個壞蛋的列表更新壞蛋的信息,并且檢查它們是否超出屏幕范圍展示這些壞蛋第一步,在#2局部加上一下代碼:1234badtimer=100badtimer1=0badguys=[[640,100]]healthvalue=194以上的代碼里定義了一個定時器,使得游戲里可以經(jīng)過一段時間后就新建一只獾。在#3局部結(jié)尾處添加以下代碼:12badguyimg1=pygame.image.load("resources/images/badguy.png")badguyimg=badguyimg1第一行跟前面加載圖片的代碼很相似。第二行聲明了一個圖片的復(fù)制。接下來,你需要更新并且顯示這些壞蛋了。在#6.2局部加上以下代碼:12345678910111213141516#6.3-Drawbadgersifbadtimer==0:
badguys.append([640,random.randint(50,430)])
badtimer=100-(badtimer1*2)
ifbadtimer1>=35:
badtimer1=35
else:
badtimer1+=5index=0forbadguyinbadguys:
ifbadguy[0]<-64:
badguys.pop(index)
badguy[0]-=7
index+=1forbadguyin
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度石油化工設(shè)備采購合同補充協(xié)議范本3篇
- 二零二五年度vi設(shè)計創(chuàng)意制作合同范本2篇
- 二零二五版環(huán)境安全風(fēng)險評估與治理合同3篇
- 合同管理在2025年度招投標(biāo)中的合規(guī)性分析3篇
- 二零二五版企業(yè)內(nèi)部技術(shù)人員掛靠合作合同范本3篇
- 二零二五年度高壓電氣設(shè)備采購及安裝合同2篇
- 二零二五版寶鋼集團勞動合同員工加班費及休息日工作安排3篇
- 二零二五年度車輛質(zhì)押擔(dān)保合同樣本2篇
- 二零二五版公路貨運合同道路運輸許可證管理與審查規(guī)范3篇
- 二零二五年度綠色環(huán)保房地產(chǎn)商品房買賣合同書3篇
- 10日益重要的國際組織第三課時中國與國際組織(教學(xué)設(shè)計)2023-2024學(xué)年統(tǒng)編版道德與法治六年級下冊
- Unit 1 同步練習(xí)人教版2024七年級英語上冊
- 工程管理重大風(fēng)險應(yīng)對方案
- 直播帶貨助農(nóng)現(xiàn)狀及發(fā)展對策研究-以抖音直播為例(開題)
- 腰椎間盤突出疑難病例討論
- 《光伏發(fā)電工程工程量清單計價規(guī)范》
- 2023-2024學(xué)年度人教版四年級語文上冊寒假作業(yè)
- (完整版)保證藥品信息來源合法、真實、安全的管理措施、情況說明及相關(guān)證明
- 營銷專員績效考核指標(biāo)
- 陜西麟游風(fēng)電吊裝方案專家論證版
- 供應(yīng)商審核培訓(xùn)教程
評論
0/150
提交評論