日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
12歲的少年教你用Python做小游戲

你有沒有想過電腦游戲是怎樣制作出來的?其實它沒有你想象的那樣復雜!

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比黃岡網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式黃岡網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋黃岡地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。

在這個教程里,你要學做一個叫《兔子和獾》的塔防游戲,兔子作為英雄,需要在城堡里抵御獾的進攻。

為了寫這個游戲的代碼,你將會用Python。好吧,我不是指一條大蟒蛇!

Python是一種計算機語言。我們在這篇教程里選擇Python是因為這門語言很容易上手,學習起來也很簡單和有趣。

如果你是個Python方面的新手,在開始看教程之前你可以看看這本書《 Think Python: How to Think Like a Computer Scientist》。這能讓你看教程的時候不那么吃力。

在看了那本書后回到這里并且準備好——兔子和獾之間有一場大戰(zhàn)爆發(fā),一起來加入到這場戰(zhàn)斗中來吧!

起步:安裝Python

如果你想在Windows PC上嘗試這篇教程里講到的東西,你需要安裝Python。確保你安裝的是2.7.3版本,而不是3.3.0版本!在安裝程序運行完之后,在開始按鈕的“所有程序”里就會有IDLE了。首先啟動IDLE。

如果你是用的Mac,上面已經(jīng)是把Python裝好了!打開終端,輸入python,然后按回車就行了

注意:如果你是安裝的從python.org下載的安裝包,那么你在Mac上也可以啟動IDLE了,它應該是在 /Application/Python2.7 這個文件夾里。

如果你按以上的步驟執(zhí)行了,那么你可以看到一下的東西:

 
 
 
 
  1. Python 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43) 
  2. [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
  3. Type "help", "copyright", "credits" or "license" for more information. 
  4. >>> 

注意:如果你想迅速終止Python,你可以輸入exit()然后按回車,或者是按Control+D。

現(xiàn)在很迅速的把Python環(huán)境配置好了,為了測試下Python是否正常工作,輸入 print 1+1 然后按回車,應該會打印出2。你剛才就寫了一個簡單的Python程序!

那么,現(xiàn)在你知道Python已經(jīng)能正常工作了,為了能用Python來寫一個游戲,你需要安裝PyGame。

PyGame是一個Python的庫,能夠讓你更容易的寫出一個游戲。它提供的功能包括圖片處理和聲音重放的功能,并且它們能很容易的整合進你的游戲里。

點擊這里下載適合你的PyGame安裝包。確保你下載的是針對2.7版本的庫。

注意:從以上鏈接下載的PyGame安裝包是無法與Mac上安裝的Python一起正常工作的。你需要從 python.org 上下載一個Python安裝包才能使用PyGame?;蛘撸憧梢杂肕acPorts來讓你的Python和PyGame正常工作。

為了確定PyGame是否安裝好了,打開IELD或者是在終端里運行Python,然后輸入import pygame 并且回車。如果沒有打出任何輸出,說明沒有問題。

但是,如果打出了如下圖的輸出,那么PyGame就沒有被安裝上。

 
 
 
 
  1. Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
  2. [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin 
  3. Type "help", "copyright", "credits" or "license" for more information. 
  4. >>> import pygame 
  5. Traceback (most recent call last): 
  6.   File "", line 1, in  
  7. ImportError: No module named pygame 
  8. >>> 

如果你發(fā)現(xiàn)了這樣的錯誤,把出錯的情況發(fā)到論壇上,我會幫助你把它運行起來

運行文件里的Python代碼

現(xiàn)在你已經(jīng)能在Python快捷終端里寫一點代碼了,如果你想要寫一個更大一點的程序(比如游戲),那么你就需要把代碼保存到文件里了。

有好幾種運行文件里的Python代碼的方法。其中一種方法是使用一個簡單的文本編輯器,比如Windows系統(tǒng)上的nodepad,或者Mac上 的TextEdit。打開一個新的文本文件,輸入Python代碼(比如print 1+1)。然后將其保存為XXX.py 。(XXX表示文件名)

在Windows上,雙擊這個py文件來運行它。在Mac上,打開終端然后輸入python,然后把代碼文件拖到終端上最后再按回車。

另一種運行代碼的方法是使用IDLE編輯器,這是在這篇教程里主要使用的方法。要運行IDLE,需要在終端里輸入idle,然后在菜單里選擇新建文 件,然后就可以利用這個文本編輯器來寫Python代碼了。你可以通過 File/Save 來保存文件,通過點擊 Run/Run(F5)來運行代碼。

要注意運行的菜單在編輯器里打開了文件之后才可用。

添加游戲資源

你現(xiàn)在已經(jīng)基本上準備好來創(chuàng)建一個游戲了。但是哪個游戲沒有很棒的圖像和音效呢?我把游戲里需要的圖像和音像保存在了zip檔案里,點擊這里下載。

在下載好文件后,為游戲創(chuàng)建一個文件夾然后把壓縮文件解壓到這個文件夾的子文件夾里,將其命名為resources,具體如下圖:

我們現(xiàn)在可以開始做兔子和獾這個游戲啦!

#p#

第一步:你好,兔子

運行IDLE,打開一個新的文本編輯窗口。輸入以下的代碼:

 
 
 
 
  1. # 1 - Import library 
  2. import pygame 
  3. from pygame.locals import * 
  4.   
  5. # 2 - Initialize the game 
  6. pygame.init() 
  7. width, height = 640, 480 
  8. screen=pygame.display.set_mode((width, height)) 
  9.   
  10. # 3 - Load images 
  11. player = pygame.image.load("resources/images/dude.png") 
  12.   
  13. # 4 - keep looping through 
  14. while 1: 
  15.     # 5 - clear the screen before drawing it again 
  16.     screen.fill(0) 
  17.     # 6 - draw the screen elements 
  18.     screen.blit(player, (100,100)) 
  19.     # 7 - update the screen 
  20.     pygame.display.flip() 
  21.     # 8 - loop through the events 
  22.     for event in pygame.event.get(): 
  23.         # check if the event is the X button 
  24.         if event.type==pygame.QUIT: 
  25.             # if it is quit the game 
  26.             pygame.quit() 
  27.             exit(0) 

把文件保存到你的游戲文件夾里,把它命名為 game.py 。我們現(xiàn)在看看這段代碼做了什么:

  1. 導入pygame庫,這一步能讓你使用庫里提供的功能
  2. 初始化pygame,設(shè)置展示窗口
  3. 加載作為兔子的圖片
  4. 不停地循環(huán)執(zhí)行接下來的部分
  5. 在給屏幕畫任何東西之前用黑色進行填充
  6. 在屏幕的(100,100)坐標出添加你加載的兔子圖片
  7. 更新屏幕
  8. 檢查一些新的事件,如果有退出命令,則終止程序的執(zhí)行。

在運行這段代碼后,你會看到一下的畫面:

可以看到一個兔子在這里,準備好要戰(zhàn)斗了!

但是暫時兔子看起來還是很孤獨的,背景上只有它一個?,F(xiàn)在是時候讓它更進一步了。

第二步:添加背景

我們現(xiàn)在開始給游戲的背景加上一些風景。這可以通過一些 screen.blit() 的調(diào)用來實現(xiàn)。

在#3的結(jié)尾處,在添加玩家圖片的后面,加上以下的代碼:

 
 
 
 
  1. grass = pygame.image.load("resources/images/grass.png") 
  2. castle = pygame.image.load("resources/images/castle.png") 

這段代碼加載圖片并將它們放在變量里?,F(xiàn)在它們需要被畫在屏幕上。但是當你檢查了草的圖片后,發(fā)現(xiàn)它不會覆蓋整個屏幕,它的分辨率是640 x 480。

添加到 game.py 里#6的代碼:

 
 
 
 
  1. for x in range(width/grass.get_width()+1): 
  2.     for y in range(height/grass.get_height()+1): 
  3.         screen.blit(grass,(x*100,y*100)) 
  4. screen.blit(castle,(0,30)) 
  5. screen.blit(castle,(0,135)) 
  6. screen.blit(castle,(0,240)) 
  7. screen.blit(castle,(0,345 )) 

你可以看到,這段代碼首先是依次通過x進行循環(huán)。又是一個依次通過y的循環(huán)并且根據(jù)循環(huán)里x和y的值來畫上草的效果。接下來的幾行就是在屏幕上畫出城堡。

如果你現(xiàn)在運行你的代碼,效果應該如下圖:

好多了——現(xiàn)在開始看起來不錯了!

#p#

第三步:讓兔子能夠移動

接下來你需要加上一些真正的游戲的元素了,比如讓兔子能夠隨著按鍵移動。

為了做到這一點,首先,你需要實現(xiàn)一個方法,用來記錄在某一時刻那個鍵被按下。可以通過新建一個按鍵狀態(tài)的隊列來存放每個你想在游戲里用到的按鍵。

把以下代碼加入到 game.py 里#2后面:

 
 
 
 
  1. keys = [False, False, False, False] 
  2. playerpos=[100,100] 

這段代碼是不言自明的,key這個隊列用來記錄幾個按鍵的情況:WASD。隊列中的每一項對應一個按鍵——第一個對應W,第二個對應A等等。

playerpos這個變量表示程序畫出玩家的位置。因為這個游戲會讓玩家向不同的方向移動,用一個變量來表示玩家的位置并且能夠依據(jù)這個變量將玩家畫出來的方案是非常適合的。

現(xiàn)在你需要修改現(xiàn)在畫出玩家的代碼,需要用上playerpos變量。把#6部分的代碼進行修改:

 
 
 
 
  1. screen.blit(player, (100,100)) 

改成:

 
 
 
 
  1. screen.blit(player, playerpos) 

接下來,根據(jù)按下的鍵來更新按鍵記錄數(shù)組。PyGame里用給按鍵添加事件的方法來檢測按鍵。

在#8八月份的結(jié)尾,就在event.py == pygame.QUIT后面,添加一下的代碼(與pygame.QUIT保持同級別縮進):

 
 
 
 
  1. if event.type == pygame.KEYDOWN: 
  2.     if event.key==K_w: 
  3.         keys[0]=True 
  4.     elif event.key==K_a: 
  5.         keys[1]=True 
  6.     elif event.key==K_s: 
  7.         keys[2]=True 
  8.     elif event.key==K_d: 
  9.         keys[3]=True 
  10. if event.type == pygame.KEYUP: 
  11.     if event.key==pygame.K_w: 
  12.         keys[0]=False 
  13.     elif event.key==pygame.K_a: 
  14.         keys[1]=False 
  15.     elif event.key==pygame.K_s: 
  16.         keys[2]=False 
  17.     elif event.key==pygame.K_d: 
  18.         keys[3]=False 

Wow!又加了這么多代碼。但是如果你仔細看看這些表達式,并沒有那么復雜。

首先,你檢查是否有一個鍵被按下或放開。然后,檢查是哪一個鍵被按下或放開了,如果被按下或放開的鍵是你使用的,你就更新記錄按鍵的變量。

最終,你需要更新playerpos變量作為按鍵后的反應。這實際上是非常簡單的。

把一下的代碼加到game.py的結(jié)尾:(讓它與for 循環(huán)保持同級別縮進)

 
 
 
 
  1. # 9 - Move player 
  2. if keys[0]: 
  3.     playerpos[1]-=5 
  4. elif keys[2]: 
  5.     playerpos[1]+=5 
  6. if keys[1]: 
  7.     playerpos[0]-=5 
  8. elif keys[3]: 
  9.     playerpos[0]+=5 

這段代碼簡單的檢查了哪個鍵被按下,然后增加或減少玩家的x和y坐標。

運行這個游戲,那么你應該會看到一下的畫面。試著按WASD,耶!好使了!

第四步:讓兔子轉(zhuǎn)向

好的,現(xiàn)在你的兔子在你按鍵的時候可以移動了,但是如果你能用鼠標讓兔子朝向你選擇的方向不是更酷嗎?這樣它就不會總是朝向一個方向了。用三角定理實現(xiàn)它會非常簡單。

看一下下面的插圖:

在上圖中,如果(5,2)是兔子的位置,(2,4)是現(xiàn)在鼠標的位置,你可以通過三角定理來得出需要旋轉(zhuǎn)的角度。然后,你知道了旋轉(zhuǎn)的角度后,以就可以來旋轉(zhuǎn)你的兔子了。

如果你對這部分感到有點疑惑,不要擔心——這沒有關(guān)系。但這是你為什么需要在數(shù)學課上集中精力的原因。在游戲編程中會用得到它的。

現(xiàn)在,你需要接受你的游戲里的概念。為了實現(xiàn)它,你可以使用PyGame Surface.rotate(degrees) 函數(shù)。

atatn2函數(shù)是來自Python 的math庫。所以把一下代碼加到#1部分:

 
 
 
 
  1. import math 

然后,把#6部分的最后一行用一下代碼替換:

 
 
 
 
  1. # 6.1 - Set player position and rotation 
  2. position = pygame.mouse.get_pos() 
  3. angle = math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26)) 
  4. playerrot = pygame.transform.rotate(player, 360-angle*57.29) 
  5. playerpos1 = (playerpos[0]-playerrot.get_rect().width/2, playerpos[1]-playerrot.get_rect().height/2) 
  6. screen.blit(playerrot, playerpos1) 

我們來瀏覽一下以上代碼的基本結(jié)構(gòu)。首先獲取鼠標和玩家的位置。然后將它們使用atan2函數(shù)。然后,獲取通過atan2函數(shù)得出的角度和弧度。

當兔子被旋轉(zhuǎn)的時候,它的位置將會改變。所以你需要計算兔子新的位置,然后將其在屏幕上顯示出來。

再次運行游戲,如果你只是按WASD這幾個鍵,那么這個游戲跟以前還是一樣的。但是如果你移動鼠標,兔子也開始旋轉(zhuǎn)了,相當酷!

第五步:射吧!兔子

現(xiàn)在你的兔子可以四處移動了,是時候來添加更多的功能了。讓兔子用箭頭射向它們的敵人怎么樣?

這一步會有一點復雜,因為你需要跟蹤所有的箭頭,更新它們,旋轉(zhuǎn)它們,在它們跑出屏幕的時候刪除它們。

首先,在#2聲明的部分加上必要的變量的聲明。

 
 
 
 
  1. acc=[0,0] 
  2. arrows=[] 

第一個變量會跟蹤玩家的精度,第二個變量會跟蹤箭頭。這個精度的變量本質(zhì)上是一個數(shù)字組成的列表,記錄了射出的箭頭數(shù)和被擊中的獾的數(shù)量。之后我們會用到這些信息用來計算射擊精確度。

接下來,在#3部分結(jié)尾加載箭頭的圖片。

 
 
 
 
  1. arrow = pygame.image.load("resources/images/bullet.png") 

現(xiàn)在,當玩家點擊鼠標,就需要射出一支箭頭。在#8部分加上以下代碼:

 
 
 
 
  1. if event.type==pygame.MOUSEBUTTONDOWN: 
  2.     position=pygame.mouse.get_pos() 
  3.     acc[1]+=1 
  4.     arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32]) 

這段代碼會檢查是否鼠標被點擊了,如果點擊了,它就會得到鼠標的位置并且根據(jù)玩家和光標的位置計算出箭頭旋轉(zhuǎn)角度。旋轉(zhuǎn)角度的值存放在arrows這個數(shù)組里。

接下來,你需要真的在屏幕上畫出箭頭來。在#6部分加上以下代碼:

 
 
 
 
  1. # 6.2 - Draw arrows 
  2. for bullet in arrows: 
  3.     index=0 
  4.     velx=math.cos(bullet[0])*10 
  5.     vely=math.sin(bullet[0])*10 
  6.     bullet[1]+=velx 
  7.     bullet[2]+=vely 
  8.     if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480: 
  9.         arrows.pop(index) 
  10.     index+=1 
  11.     for projectile in arrows: 
  12.         arrow1 = pygame.transform.rotate(arrow, 360-projectile[0]*57.29) 
  13.         screen.blit(arrow1, (projectile[1], projectile[2])) 

vely和velx的值是根據(jù)三角定理算出來的。10是箭頭的速度。if表達式是檢查箭頭是否超出了屏幕范圍,如果超出,就刪除這個箭頭。第二個for表達式是循環(huán)來把箭頭根據(jù)相應的旋轉(zhuǎn)畫出來。

試著運行游戲。當你點擊鼠標時,你的兔子就可以射出剪頭了:D

#p#

第六步:獾,拿上武器!

好吧,現(xiàn)在有了城堡,并且你有一個英雄可以移動和射出箭頭。還差什么呢?攻擊城堡的敵人可以被英雄用箭頭射了!

在這一步,你將會隨機創(chuàng)建出一些獾沖向城堡。在游戲的進程中會有越來越多的獾冒出來。所以,我們來列個接下來要做的事情的清單。

  1. 添加一個壞蛋的列表
  2. 更新壞蛋的信息,并且檢查它們是否超出屏幕范圍
  3. 展示這些壞蛋

第一步,在#2部分加上一下代碼:

 
 
 
 
  1. badtimer=100 
  2. badtimer1=0 
  3. badguys=[[640,100]] 
  4. healthvalue=194 

以上的代碼里定義了一個定時器,使得游戲里可以經(jīng)過一段時間后就新建一只獾。

在#3部分結(jié)尾處添加以下代碼:

 
 
 
 
  1. badguyimg1 = pygame.image.load("resources/images/badguy.png") 
  2. badguyimg=badguyimg1 

第一行跟前面加載圖片的代碼很相似。第二行聲明了一個圖片的復制。

接下來,你需要更新并且顯示這些壞蛋了。在#6.2部分加上以下代碼:

 
 
 
 
  1. # 6.3 - Draw badgers 
  2. if badtimer==0: 
  3.     badguys.append([640, random.randint(50,430)]) 
  4.     badtimer=100-(badtimer1*2) 
  5.     if badtimer1>=35: 
  6.         badtimer1=35 
  7.     else: 
  8.         badtimer1+=5 
  9. index=0 
  10. for badguy in badguys: 
  11.     if badguy[0]<-64: 
  12.         badguys.pop(index) 
  13.     badguy[0]-=7 
  14.     index+=1 
  15. for badguy in badguys: 
  16.     screen.blit(badguyimg, badguy) 

上面的代碼看起來有不少。第一行是來檢查badtime是否為0,如果為0,創(chuàng)建一個獾然后重新設(shè)置badtime。第一個循環(huán)更新獾的x坐標,檢查獾是否超出屏幕范圍,如果超出范圍,將獾刪掉。第二個循環(huán)是來畫出所有的獾。

為了在以上代碼里用到隨機的功能,你需要導入random庫。所以在#1部分加上導入的代碼:

 
 
 
 
  1. import random 

最后,把一行代碼添加到#4部分的while表達式后面:

 
 
 
 
  1. badtimer-=1 
 

試著運行這段代碼。現(xiàn)在它應該像個真正的游戲了——你可以移動、射箭、轉(zhuǎn)向,然后有獾沖向你。

但是先慢著!為什么獾沒有炸掉城堡?我們快速的把這功能加進來。

把以下代碼加到#6.3部分index+=1之前的第一個循環(huán)里:

 
 
 
 
  1. # 6.3.1 - Attack castle 
  2. badrect=pygame.Rect(badguyimg.get_rect()) 
  3. badrect.top=badguy[1] 
  4. badrect.left=badguy[0] 
  5. if badrect.left<64: 
  6.     healthvalue -= random.randint(5,20) 
  7.     badguys.pop(index) 
  8. # 6.3.3 - Next bad guy 

這段代碼相當簡單。如果獾的x坐標離右邊小于64,就刪除壞蛋并且減少游戲里的健康值,減少的大小為5至20里的一個隨機數(shù)。

再次運行這個游戲,你就會有一些獾沖過來并且在碰到城堡的時候會消失。盡管你看不到,獾實際上會降低你的健康值。

第七部:獾與箭頭的碰撞

獾們沖向你的城堡,但是你的箭頭對它們完全沒有作用!這讓兔子怎么放手它的家園呢?

是時候來讓箭頭能夠殺死獾讓你能保護你的城堡并且贏得這場游戲?;旧?,你需要循環(huán)所有的壞蛋,你需要循環(huán)所有的箭頭來檢查是否有碰撞。如果碰撞上,刪除獾,刪除箭頭,并且添加精確度的變量里面加1。

在#6.3.1部分后面加這些:

 
 
 
 
  1. #6.3.2 - Check for collisions 
  2. index1=0 
  3. for bullet in arrows: 
  4.     bullrect=pygame.Rect(arrow.get_rect()) 
  5.     bullrect.left=bullet[1] 
  6.     bullrect.top=bullet[2] 
  7.     if badrect.colliderect(bullrect): 
  8.         acc[0]+=1 
  9.         badguys.pop(index) 
  10.         arrows.pop(index1) 
  11.     index1+=1 

這段代碼里面只有一個地方需要提一下,這個if表達式使用了PyGame內(nèi)建功能來檢查兩個矩形是否交叉。接下來的一些代碼跟上面說的一樣。

再運行下代碼,現(xiàn)在你就可以用箭頭來殺死獾了。

第八步:添加健康值和時間的顯示

現(xiàn)在游戲運行起來相當不錯了?,F(xiàn)在有攻擊者,有防守者。現(xiàn)在,你需要的就是通過一個方法來顯示兔子的得分。

最簡單的方法就是添加一個HUD來顯示當前城堡的生命值。你也可以加一個計時來記錄城堡存活下來的時間。

首先,添加一個計時。在#7部分加上下面的代碼:

 
 
 
 
  1. # 6.4 - Draw clock 
  2. font = pygame.font.Font(None, 24) 
  3. survivedtext = font.render(str((90000-pygame.time.get_ticks())/60000)+":"+str((90000-pygame.time.get_ticks())/1000%60).zfill(2), True, (0,0,0)) 
  4. textRect = survivedtext.get_rect() 
  5. textRect.topright=[635,5] 
  6. screen.blit(survivedtext, textRect) 

上面的代碼使用了PyGame默認的大小為24的字體。這個字體用來顯示時間信息。

 
 
 
 
  1. healthbar = pygame.image.load("resources/images/healthbar.png") 
  2. health = pygame.image.load("resources/images/health.png") 

接下來添加代碼到#6.4部分后面:

 
 
 
 
  1. # 6.5 - Draw health bar 
  2. screen.blit(healthbar, (5,5)) 
  3. for health1 in range(healthvalue): 
  4.     screen.blit(health, (health1+8,8)) 

這段代碼首先畫了一個全紅色的生命值條。然后根據(jù)城堡的生命值往生命條里面添加綠色。

運行下代碼,現(xiàn)在就會有計時和生命值條了。

#p#

第九步:贏或輸

現(xiàn)在怎么樣?如果你玩的時間夠長,即使你的生命值已經(jīng)變成0了,游戲仍然是繼續(xù)的!不僅如此,你仍然可以用箭頭射向這些獾。這肯定不太對。你需要加上一些贏或者輸?shù)那闆r來讓你的游戲值得玩。

那么我們來加上勝利或者失敗的條件。你可以通過終止主循環(huán),進入勝利/失敗的循環(huán)來實現(xiàn)它。你需要指出玩家是否勝利,并將其顯示在屏幕上。

下面是一些勝利/失敗的一些基本條件:

如果時間到了(90秒)那么:

  • 停止運行游戲
  • l設(shè)置游戲的輸出

如果城堡被毀,那么:

  • 停止運行游戲
  • l設(shè)置游戲的輸出

精確度是一直都需要計算的。

在game.py 結(jié)尾添加這些代碼:

 
 
 
 
  1.     #10 - Win/Lose check 
  2.     if pygame.time.get_ticks()>=90000: 
  3.         running=0 
  4.         exitcode=1 
  5.     if healthvalue<=0: 
  6.         running=0 
  7.         exitcode=0 
  8.     if acc[1]!=0: 
  9.         accuracy=acc[0]*1.0/acc[1]*100 
  10.     else: 
  11.         accuracy=0 
  12. # 11 - Win/lose display        
  13. if exitcode==0: 
  14.     pygame.font.init() 
  15.     font = pygame.font.Font(None, 24) 
  16.     text = font.render("Accuracy: "+str(accuracy)+"%", True, (255,0,0)) 
  17.     textRect = text.get_rect() 
  18.     textRect.centerx = screen.get_rect().centerx 
  19.     textRect.centery = screen.get_rect().centery+24 
  20.     screen.blit(gameover, (0,0)) 
  21.     screen.blit(text, textRect) 
  22. else: 
  23.     pygame.font.init() 
  24.     font = pygame.font.Font(None, 24) 
  25.     text = font.render("Accuracy: "+str(accuracy)+"%", True, (0,255,0)) 
  26.     textRect = text.get_rect() 
  27.     textRect.centerx = screen.get_rect().centerx 
  28.     textRect.centery = screen.get_rect().centery+24 
  29.     screen.blit(youwin, (0,0)) 
  30.     screen.blit(text, textRect) 
  31. while 1: 
  32.     for event in pygame.event.get(): 
  33.         if event.type == pygame.QUIT: 
  34.             pygame.quit() 
  35.             exit(0) 
  36.     pygame.display.flip() 

這是最長的一段代碼!不過它并不復雜。

第一個ifb表達式是檢查是否時間到了。第二個是檢查城堡是否被摧毀了。第三個計算你的精準度。之后,一個if表達式是檢查你是贏了還是輸了,然后顯示出相應的圖片。

當然,如果你想在贏或輸?shù)臅r候顯示圖片,這些圖片首先需要加載。所以在#3部分加上這些代碼:

 
 
 
 
  1. gameover = pygame.image.load("resources/images/gameover.png") 
  2. youwin = pygame.image.load("resources/images/youwin.png") 

還有需要改的地方,把#4部分從:

 
 
 
 
  1. # 4 - keep looping through 
  2. while 1: 
  3.     badtimer-=1 

改成:

 
 
 
 
  1. # 4 - keep looping through 
  2. running = 1 
  3. exitcode = 0 
  4. while running: 
  5.     badtimer-=1 

這個running變量會跟蹤游戲是否結(jié)束,exitcode變量會跟蹤玩家是否勝利。

再次運行游戲,你就發(fā)現(xiàn)你可以勝利或者失敗了!酷

第十步:免費的音樂和聲音效果

這個游戲現(xiàn)在相當不錯了,但是沒有聲音。有點太安靜了。加上一點聲音效果,能讓你更好地感受這個游戲。

PyGame能夠讓加載和播放聲音非常簡單。首先,你在#2部分結(jié)尾加上這些代碼:

 
 
 
 
  1. pygame.mixer.init() 

然后在#3部分加載聲音然后設(shè)置聲音:

 
 
 
 
  1. # 3.1 - Load audio 
  2. hit = pygame.mixer.Sound("resources/audio/explode.wav") 
  3. enemy = pygame.mixer.Sound("resources/audio/enemy.wav") 
  4. shoot = pygame.mixer.Sound("resources/audio/shoot.wav") 
  5. hit.set_volume(0.05) 
  6. enemy.set_volume(0.05) 
  7. shoot.set_volume(0.05) 
  8. pygame.mixer.music.load('resources/audio/moonlight.wav') 
  9. pygame.mixer.music.play(-1, 0.0) 
  10. pygame.mixer.music.set_volume(0.25) 

上面大部分代碼就是加載聲音文件并且配置音量。但是注意 pygame.mixer.music.load這行代碼——這一行加載游戲的背景音樂然后下一行讓背景音樂一直不停的播放。

現(xiàn)在注意聲音的配置?,F(xiàn)在你所有需要做的就是在需要的時候播放不同的音樂。

 
 
 
 
  1. # section 6.3.1 after if badrect.left<64: 
  2. hit.play() 
  3. # section 6.3.2 after if badrect.colliderect(bullrect): 
  4. enemy.play() 
  5. # section 8, after if event.type==pygame.MOUSEBUTTONDOWN: 
  6. shoot.play() 

再次運行游戲,你會發(fā)現(xiàn)現(xiàn)在有背景音樂了,并且在射出箭頭和碰撞的時候會有音效。這游戲就更加逼真啦!

那接下來呢?

你應該為自己感到自豪:你剛剛完成了一個游戲;里面包含了音樂,音效,一個殺手兔子,自殺沖鋒的獾等等。我跟你說了這確實是可以完成的!

你可以從這里下載最終的游戲代碼。

在這基礎(chǔ)上,你可以根據(jù)你自己的創(chuàng)意來擴展游戲!你可以試著重置里面的各種圖片,加上不同的槍或者是不同的怪物!

原文鏈接: Julian Meyer   翻譯: 伯樂在線 - 伯樂在線讀者

譯文鏈接: http://blog.jobbole.com/46308/


分享名稱:12歲的少年教你用Python做小游戲
轉(zhuǎn)載來于:http://www.5511xx.com/article/cccoggi.html