塔防式游戲詳細(xì)設(shè)計之一_第1頁
塔防式游戲詳細(xì)設(shè)計之一_第2頁
塔防式游戲詳細(xì)設(shè)計之一_第3頁
塔防式游戲詳細(xì)設(shè)計之一_第4頁
塔防式游戲詳細(xì)設(shè)計之一_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論