久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

手把手教你零基礎(chǔ)寫Python小游戲——附贈完整代碼 資源包

 長沙7喜 2018-01-29

(游戲展示)

愛玩游戲的你是不是也經(jīng)常想要自己動手制作游戲呢,?沒問題,!今天我們就手把手教你用Python寫出有趣的小游戲!


不管你是學生還是家長,,我們都希望可以一起來學習計算機思維,。如果你之前有關(guān)注我們公眾號的話,相信你已經(jīng)了解到為什么Python是最適合青少年學習的編程語言(點擊藍色文字自動跳轉(zhuǎn)),。

我們今天要制作的小游戲是Bunnies vs. Badgers (兔獾大作戰(zhàn)),。游戲中的兔子通過射箭抵御獾的進攻,從而保衛(wèi)自己的四個堡壘,。

(最終效果)


  準備工作:安裝Python  

在這篇文章中,,我們使用的是Python2.7

Windows32位下載地址:https://www./ftp/python/2.7.13/python-2.7.13.msi

Windows64位下載地址:https://www./ftp/python/2.7.13/python-2.7.13.amd64.msi

Mac下載地址:https://www./ftp/python/2.7.13/python-2.7.13-macosx10.6.pkg

成功安裝后,你將在“所有程序”中找到IDLE, 這是Python的集成開發(fā)學習環(huán)境(Integrated Development and Learning Environment),。運行IDLE就可以開始愉快地寫碼了,!

如果你要想要測試一下Python是否正常運行,,可以試著輸入print 1+1并按回車鍵。如果輸出的是2,,那么恭喜你,!你的Python是正常的!

接下來你需要安裝PyGame來用Python做游戲,。

PyGame是Python的一個庫(library),。Python有很多這樣的庫,庫內(nèi)自帶能完成各種功能的許多函數(shù)(functions),。例如,,我們可以使用PyGame導入游戲的圖片,音頻等 —— PyGame讓制作Python小游戲變得更簡單了,!

PyGame Windows下載地址:http:///ftp/pygame-1.9.1.win32-py2.7.msi

PyGame  Mac 下載地址:http:///ftp/pygame-1.9.1release--32bit-py2.7-macosx10.3.dmg

為了測試PyGame是否正常運行,,你可以打開IDLE并輸入import pygame,如果沒有出現(xiàn)任何提示,,PyGame就安裝成功了,!


  運行文件中的Python代碼  

在之前的測試中,我們使用了print和import寫了兩行短代碼,,但如果我們要寫一些比較大的程序(比如游戲),,就需要把代碼保存在一個文件里。在IDLE中,,只要點擊File – New Window新建文件就能將你寫的代碼保存在這個文件中,。


  添加游戲素材  

我們馬上就可以開始寫游戲了!不過在此之前,,我們需要一些圖像和音頻素材,。你可以拉到文章最后掃碼關(guān)注碼趣學院獲取素材壓縮包,!

解壓縮文件后,,你將得到一個名為resources 的文件夾,所有的音頻(audio)和圖像(images)文件已經(jīng)分類放好了,!你需要做的是為你的游戲創(chuàng)建一個文件夾,,如上圖的PyGame,然后將resources文件夾放在PyGame文件夾內(nèi),。

我們現(xiàn)在可以開始做小兔子和獾了,!


  第一步:添加小兔子  

首先,打開IDLE并新建窗口,,然后在編輯窗口內(nèi)輸入以下代碼:

# 1 – 導入pygame庫

import pygame
from pygame.locals import *
 
# 2 – 初始化游戲
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))
 
# 3 – 載入圖片
player = pygame.image.load('resources/images/dude.png')
 
# 4 – 不斷循環(huán)
while 1:
    # 5 – 每次繪圖前清除屏幕
    screen.fill(0)
    # 6 – 繪制屏幕組成元素
    screen.blit(player, (100,100))
    # 7 – 刷新屏幕
    pygame.display.flip()
    # 8 – 循環(huán)事件
    for event in pygame.event.get():
        # 檢驗事件是否是X鍵
        if event.type==pygame.QUIT:
            # 如果是的話就退出游戲
            pygame.quit()
            exit(0)

將寫好的代碼文件保存在你的PyGame文件夾中(我們剛剛創(chuàng)建的),,并將文件命名為game.py

現(xiàn)在讓我們一步步分析上面的代碼:

1.     導入pygame庫

這一步讓你可以直接使用pygame庫內(nèi)的函數(shù)來實現(xiàn)各種功能(如導入圖像,,音頻等),。

2.     初始化游戲

初始化游戲并設(shè)置一個640 x 480的窗口。

3.     載入圖片

載入小兔子的圖片,。

4.     不斷循環(huán)

循環(huán)執(zhí)行被縮進(前面有空格)的代碼,。


小提示:Python使用縮進來區(qū)分代碼塊,所以縮進在Python中十分重要,。


5.     每次繪圖前清除屏幕

每次繪圖前先用黑色填充整個窗口,。

6.     繪制屏幕組成元素

在坐標x=100,y=100的地方放上小兔子,。

7.     刷新屏幕

8.     循環(huán)事件

檢查是否有新的事件(event),,在這里,這個事件是退出(quit)命令,。如果有的話,,退出程序。


小提示:其實根據(jù)PyGame規(guī)定,,你不需要使用pygame.quit()就能夠退出程序,,因為當編譯器關(guān)閉的時候程序會自動關(guān)閉。但是在Mac中,,如果不用pygame.quit(),,游戲不會自動停止。


如果你執(zhí)行上面的代碼(在IDLE的菜單欄中點Run或Run Module),,你將會看到一個類似下圖的窗口:

我們可以看到,,小兔子已經(jīng)在屏幕上做好準備了!

但是這一片黑黑的屏幕看上去略嚇人,,而且屏幕上孤零零的一只小兔子似乎十分孤獨…讓我們加點背景和其他東西吧~


  第二步:制作游戲場景  

現(xiàn)在我們要制作游戲場景,,這只需要多用幾次screen.blit()就可以做到。


在代碼的第三部分 (#3 )載入小兔子圖片后,,加上下面兩行代碼:


grass = pygame.image.load('resources/images/grass.png')
castle = pygame.image.load('resources/images/castle.png')


這兩行代碼載入了兩張不同的圖片并把圖片分別放入了不同的變量(variable)中?,F(xiàn)在這兩張圖片就能出現(xiàn)在屏幕上了。不過你會發(fā)現(xiàn),,由grass.png載入的草坪背景不能覆蓋整個640 x 480的窗口,。這意味著你必須調(diào)整圖片來完全覆蓋窗口。

在第六部分(#6)的開頭添加以下代碼(在確定小兔子位置之前):

 

for x in range(width/grass.get_width()+1):
    for y in range(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))


讓我們一起來看看上面的代碼~for語句先使用x進行循環(huán),。在這一層循環(huán)中,,代碼又通過y進行內(nèi)層循環(huán),然后把草坪圖片放在循環(huán)得到的x, y 坐標上,。接下來的幾行代碼在屏幕上放置堡壘(castle),。


如果你現(xiàn)在執(zhí)行程序,你將看到下圖的場景:

是不是比剛才好多了,?:)


  第三步:讓小兔子動起來,!

接下來我們要真正開始加入游戲元素啦,!比如通過按鍵盤讓小兔子動起來。


首先,,我們需要讓程序追蹤玩家什么時候按下了什么鍵,。將下面兩行代碼添加到第二部分(#2)的末尾(在設(shè)定游戲窗口的高和寬之后):

       

keys = [False, False, False, False]
playerpos=[100,100]


在這兩行代碼中,我們創(chuàng)建了一個名為keys的數(shù)組(array),,其中有4個False值,,每個值對應W、A,、S,、D中的一個按鍵。


變量playerpos對應小兔子位置坐標,。因為在游戲進行的過程中,,小兔子會不斷移動,所以用一個變量儲存小兔子的位置更加方便,。


現(xiàn)在,,我們要修改現(xiàn)有的代碼,把小兔子圖片放在playerpos對應的坐標上,。把第六部分(#6)中的這行代碼:

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

改為:

   screen.blit(player, playerpos)

接下來,,我們要使用PyGame自帶的event.key函數(shù)來檢測玩家按下了什么鍵,并相應地將keys內(nèi)的False值改為True,。

 

在第八部分(#8)的最后,,緊接著event.type == pygame.QUIT后,加上這些代碼(縮進和pygame.QUIT的if代碼塊相同):

       

if event.type == pygame.KEYDOWN:
    if event.key==K_w:
        keys[0]=True
    elif event.key==K_a:
        keys[1]=True
    elif event.key==K_s:
        keys[2]=True
    elif event.key==K_d:
        keys[3]=True
if event.type == pygame.KEYUP:
    if event.key==pygame.K_w:
        keys[0]=False
    elif event.key==pygame.K_a:
        keys[1]=False
    elif event.key==pygame.K_s:
        keys[2]=False
    elif event.key==pygame.K_d:
        keys[3]=False

哇哦,!這里有好多行代碼呢,!不過如果我們將這些代碼拆分來看,其實并不是太難,。

 

首先,,我們要看看是否(if)有鍵被按下或者松開了,接著檢測是哪個鍵被按下或者松開了,。如果檢測到的鍵是W,、A、S,、D中的某一個,,就相應更新keys數(shù)列中的值。

 

接著,,你需要根據(jù)玩家按下的鍵更新playerpos變量,,這個非常簡單,只需要把下面代碼加到目前所寫的代碼最后(使用一個縮進,,和for循環(huán)同一層)

       

# 9 – 移動小兔子
    if keys[0]:
        playerpos[1]-=5
    elif keys[2]:
        playerpos[1]+=5
    if keys[1]:
        playerpos[0]-=5
    elif keys[3]:
        playerpos[0]+=5


這些代碼檢測哪個鍵被按下了,,并對小兔子的x或y坐標做相應的增減,。

 

運行游戲,你會看到和剛才相似的場景,。試著按按WASD,,你的小兔子動起來了!


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

現(xiàn)在,,你的小兔子可以根據(jù)你的按鍵移動了!


不過現(xiàn)在小兔子一直面向右邊,。如果能用鼠標讓小兔子面對不同的方向,,不就更酷了嗎!我們只需要用一些簡單的三角函數(shù)知識就能解決這個問題,。

 

讓我們一起看看下面的插圖

如上圖,,假設(shè)(5,3)是小兔子的位置,,(2,,4)是鼠標的位置,旋轉(zhuǎn)角度z就可以由三角函數(shù)atan2來求出(diff x和diff y分別為x,、y坐標的差),。求出旋轉(zhuǎn)角度z以后,我們便可以相應地讓小兔子轉(zhuǎn)向,。

 

如果你沒有完全理解這部分也沒關(guān)系,,你還是可以繼續(xù)我們的教程!不過我們應該能夠由此意識到數(shù)學在編程中的重要性,。

 

現(xiàn)在我們要把上面的數(shù)學式用到我們的游戲里了,。我們可以用surface.rotate(degress)函數(shù)來讓小兔子轉(zhuǎn)向。


小提示:用atan2求出的z值是用弧度制(radians)表示的,。


atan2函數(shù)來自Python 的math庫,。所以我們要先把下面這行代碼加到第一部分(#1)開頭:

 import math

接著,把第六部分(#6)的最后一行(帶有player.blit的這行)改成下面的代碼:

       

# 6.1 – 設(shè)定小兔子的位置并讓它轉(zhuǎn)向
position = 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)


讓我們一起看看上面的代碼,。首先,,我們要知道鼠標的位置和小兔子的位置。接著,,我們atan2函數(shù)得到角度,。然后,我們要將atan2函數(shù)得到的角度從弧度制(radians)轉(zhuǎn)化為角度制(degrees)(把弧度乘以57.29或者360/2π),。

 

因為小兔子被轉(zhuǎn)向了,,它的位置也會相應改變。所以最后我們要計算小兔子的新位置,,然后讓小兔子走到屏幕上相應的地方,。

 

再次運行游戲?,F(xiàn)在,如果你移動你的鼠標,,小兔子也會跟著轉(zhuǎn)動了,!


  第五步:小兔子,射擊,!

你的小兔子已經(jīng)能夠轉(zhuǎn)動了,,現(xiàn)在讓我們給它添加一些動作,!讓小兔子在敵人來襲的時候向敵人射箭,!

 

這一步可能稍微有些復雜,,因為你需要用代碼不停追蹤弓箭的位置,,計算弓箭射出的角度,并在它們超出屏幕范圍時把它們刪掉。

 

首先,,在第二部分(#2)末尾添加一些要用到的變量:               

       

acc=[0,0]
arrows=[]


第一個變量acc檢測玩家的準確度,第二個變量arrows用于追蹤所有弓箭,。變量acc實際上是一個由兩個數(shù)字組成的列表(list),,它記錄了射擊的次數(shù)和被擊中的獾的數(shù)量,我們要用這兩個數(shù)字來計算精確度百分比。

 

接著,,在第三部分(#3)末尾載入弓箭的圖像:

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

當玩家點擊鼠標的時候,,需要有弓箭射出,。把下面的代碼加到第八部分(#8)末尾來實現(xiàn)這一功能:

       

if event.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])


這些代碼檢測玩家是否點擊了鼠標。如果點擊了鼠標,,就記下鼠標的位置,并根據(jù)小兔子的位置和鼠標的位置得出弓箭射出的角度,。這些角度值被記錄在arrows列表中,。

 

我們現(xiàn)在要讓弓箭顯示在屏幕上,,把下面的代碼加在#6.1末尾:

       

# 6.2 – 在屏幕上顯示弓箭
for bullet in arrows:
    index=0
    velx=math.cos(bullet[0])*10
    vely=math.sin(bullet[0])*10
    bullet[1]+=velx
    bullet[2]+=vely
    if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:
        arrows.pop(index)
    index+=1
    for projectile in arrows:
        arrow1 = pygame.transform.rotate(arrow, 360-projectile[0]*57.29)
        screen.blit(arrow1, (projectile[1], projectile[2]))


弓箭的x、y坐標velxvely的值都是用基本的三角函數(shù)計算出來的。10是弓箭的速度。if語句用于檢測弓箭是否超出了窗口范圍,如果超出的話,,就把超出的弓箭從列表中刪去,。第二個for語句對所有弓箭進行循環(huán),,并畫出它們正確的位置和角度,。

 

現(xiàn)在運行游戲,

你應該能讓小兔子在你點擊鼠標的時候射擊了,!


  第六步:獾,,拿起你們的武器!

好,現(xiàn)在我們造出了堡壘,,也有了保衛(wèi)城堡的主角兔子,,是時候讓敵人上場了,!

 

在這一步中,,我們要讓獾隨機地從不同方向出現(xiàn)并沖向堡壘。在游戲進行的過程中,,獾也會變得越來越多,。我們先列個清單,看看我們需要做些什么:

1.     把敵人獾加到一個列表(list)中

2.     每過一幀就更新一次獾的位置,,并檢測它們是否超出了屏幕范圍

3.     把獾顯示在屏幕上

首先,,把下面的代碼加到第二部分(#2)的末尾:

       

badtimer=100
badtimer1=0
badguys=[[640,100]]
healthvalue=194


上面的代碼設(shè)置了一個計時器和一些其他的變量,所以每隔一段時間,,游戲里就會出現(xiàn)一只新的獾,。每過一幀,計時器badtimer就減少1,,直到它的值變?yōu)?,,這時讓一只新的獾出現(xiàn)在屏幕上。

 

把下面兩行代碼加到第三部分(#3)末尾:

       

badguyimg1 = pygame.image.load('resources/images/badguy.png')
badguyimg=badguyimg1


第一行和前面其他載入圖片等代碼都差不多,。第二行復制了獾的圖像,。

 

接著,你需要更新獾的位置,,讓它們相應地顯示在屏幕上,。把下面的代碼加到#6.2后面:

       

# 6.3 – 在屏幕上顯示獾
if badtimer==0:
    badguys.append([640, random.randint(50,430)])
    badtimer=100-(badtimer1*2)
    if badtimer1>=35:
        badtimer1=35
    else:
        badtimer1+=5
index=0
for badguy in badguys:
    if badguy[0]<>
        badguys.pop(index)
    badguy[0]-=7
    index+=1
for badguy in badguys:
    screen.blit(badguyimg, badguy)


第一行代碼檢查badtimer是否為0,如果是的話,,就產(chǎn)生一只新獾,,并根據(jù)badtimer已經(jīng)被重設(shè)的次數(shù)來重新設(shè)置badtimer的值。第一個for循環(huán)更新了獾的x坐標,,檢測獾是否超出了屏幕范圍,,如果超出的話,就把它刪除出列表,。第二個for循環(huán)讓所有在屏幕范圍內(nèi)的獾顯示在屏幕上,。

 

為了使用上面的random函數(shù),,我們需要用到random庫,。在第一部分末尾加上這行代碼:

 import random

最后,把這行代碼加到第四部分(#4)的while語句后面,,這樣每一幀結(jié)束后badtimer的值就減少1:

badtimer-=1

再次運行游戲,,現(xiàn)在小兔子可以射擊,移動,,轉(zhuǎn)向,,而獾也在試著沖向堡壘。

不過等等…為什么獾碰到堡壘時也沒能摧毀它們呢,?讓我們趕緊補上一些代碼 …

 

把這些代碼加到#6.3的index+=1之前:

       

# 6.3.1 – 攻擊堡壘
badrect=pygame.Rect(badguyimg.get_rect())
badrect.top=badguy[1]
badrect.left=badguy[0]
if badrect.left<>
    healthvalue -= random.randint(5,20)
    badguys.pop(index)
# 6.3.3 - 下一個敵人


這些代碼比較簡單,。如果某只獾的x坐標小于64,,就刪掉那只獾,并把堡壘的健康值(health value)隨機地減少5到20點(之后,,我們將把健康值顯示在屏幕上),。

 

現(xiàn)在運行游戲,你應該能看到一群獾沖向堡壘,,并在成功攻擊堡壘后消失,。雖然你現(xiàn)在不能看見,但是堡壘的健康值也在相應地減少,。


  第七步:成功擊中敵人,!

獾在攻擊你的堡壘,不過小兔子的弓箭卻傷害不了他們,,這怎么行,?在這一步中我們要讓弓箭能夠射殺敵人。

 

為了讓弓箭射殺敵人,,我們要對所有的獾進行循環(huán),,并在這一層循環(huán)中,對所有的弓箭進行循環(huán),,檢測這些弓箭是否射到了獾,。如果射到了,就刪掉獾和弓箭,,并給準確度acc加1點,。

 

在#6.3.1之后加上這些代碼:

       

#6.3.2 - 檢測弓箭是否射中獾
index1=0
for bullet in arrows:
    bullrect=pygame.Rect(arrow.get_rect())
    bullrect.left=bullet[1]
    bullrect.top=bullet[2]
    if badrect.colliderect(bullrect):
        acc[0]+=1
        badguys.pop(index)
        arrows.pop(index1)
    index1+=1


在這些代碼中有一點需要注意。If語句中的.colliderect是pygame自帶的函數(shù),,能夠檢測兩個矩形是否相交,。剩下的代碼執(zhí)行的任務就和前面解釋的一樣。

 

如果你執(zhí)行這個程序,,會發(fā)現(xiàn)小兔子能夠射殺敵人了,!


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

現(xiàn)在游戲進行得很不錯了!我們現(xiàn)在需要不斷記錄分數(shù),,看看小兔子的防守做得怎么樣,。我們可以在屏幕左上角加一個“血槽”來表示現(xiàn)在堡壘的健康值,并在屏幕右上角顯示存活的時間,。

 

首先把下面的代碼加在第七部分(#7)開頭,,讓屏幕右上角顯示時間:

       

# 6.4 – 顯示時間
  font = pygame.font.Font(None, 24)
  survivedtext = font.render(str((90000-pygame.time.get_ticks())/60000)+':'+str((90000-pygame.time.get_ticks())/1000%60).zfill(2), True, (0,0,0))
  textRect = survivedtext.get_rect()
  textRect.topright=[635,5]
  screen.blit(survivedtext, textRect)


上面的代碼設(shè)置了一個字號為24 的新字體,font.render把這個新字體用于屏幕上所有的函數(shù),。接著,,我們把文字放在屏幕右上角(topright)并顯示在屏幕上。

現(xiàn)在我們加“血槽”,。不過在此之前,,我們需要先加載血槽的圖像,。把下面兩行代碼加到第三部分(#3)末尾:

       

healthbar = pygame.image.load('resources/images/healthbar.png')
health = pygame.image.load('resources/images/health.png')


第一張圖片healthbar.png是用于整個血槽的紅色圖片。第二張圖片health.png是用于顯示當下健康值的綠色圖片,。

現(xiàn)在把下面的代碼添加在#6.4之后

       

# 6.5 – 顯示血槽
  screen.blit(healthbar, (5,5))
  for health1 in range(healthvalue):
      screen.blit(health, (health1+8,8))


這幾行代碼首先顯示出整個紅色血槽,,然后根據(jù)當下的健康值改變綠色的部分。

 

運行程序,,你現(xiàn)在能夠看到左上角的血槽和右上角的時間,。


  第九步:揭曉勝負  

到目前為止,即使你的血槽空了,,游戲還能繼續(xù),,你還能繼續(xù)攻擊敵人。為了解決這個問題,,我們需要加上決定勝負的條件,。

 

為了確定勝負,我們需要退出主循環(huán),,進入勝負循環(huán),。在勝負循環(huán)中,你需要知道玩家是贏了還是輸了,,然后把勝負顯示在屏幕上,。

 

現(xiàn)在我們確定一下大致的勝負規(guī)則:

 

如果存活到了規(guī)定時間(90000ms  或 90s):

·        停止運行游戲

·        把游戲結(jié)果設(shè)置為1(即勝利)

 

如果堡壘都被摧毀了

·        停止運行游戲

·        把游戲結(jié)果設(shè)置為0(即失敗)

計算出射擊的精確度acc

 

把這些代碼加到最后:

       

#10 – 勝負判斷
if pygame.time.get_ticks()>=90000:
    running=0
    exitcode=1
if healthvalue<>
    running=0
    exitcode=0
if acc[1]!=0:
    accuracy=acc[0]*1.0/acc[1]*100
else:
    accuracy=0
# 11 –在屏幕上顯示勝負
if exitcode==0:
    pygame.font.init()
    font = pygame.font.Font(None, 24)
    text = font.render('Accuracy: '+str(accuracy)+'%', True, (255,0,0))
    textRect = text.get_rect()
    textRect.centerx = screen.get_rect().centerx
    textRect.centery = screen.get_rect().centery+24
    screen.blit(gameover, (0,0))
    screen.blit(text, textRect)
else:
    pygame.font.init()
    font = pygame.font.Font(None, 24)
    text = font.render('Accuracy: '+str(accuracy)+'%', True, (0,255,0))
    textRect = text.get_rect()
    textRect.centerx = screen.get_rect().centerx
    textRect.centery = screen.get_rect().centery+24
    screen.blit(youwin, (0,0))
    screen.blit(text, textRect)
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit(0)
    pygame.display.flip()


小提示:其中,,acc[0] * 1.0是把acc[0]轉(zhuǎn)化為浮點數(shù),。如果不將其轉(zhuǎn)化為浮點數(shù)的話,計算的結(jié)果將是整數(shù)而不是小數(shù),。


第一個if語句檢測時間是否用完,。第二個if語句檢測堡壘是否被摧毀。第三個if語句計算玩家的設(shè)計精準度,。在第十一部分(#11)中,,if語句檢測玩家的勝負情況并顯示相應的圖片。

 

為了顯示與勝負相關(guān)的圖片,,我們需要先加載這些圖片,。把下面的兩行代碼加到第三部分(#3)末尾:

       

gameover = pygame.image.load('resources/images/gameover.png')
youwin = pygame.image.load('resources/images/youwin.png')


最后,把第四部分(#4)中的:

       

# 4 – 不斷循環(huán)
while 1:
    badtimer-=1

改為:

# 4 – 不斷循環(huán)

running = 1
exitcode = 0
while running:
    badtimer-=1


變量running判定游戲是否結(jié)束,,變量exitcode判定玩家是贏了還是輸了,。

 

再次執(zhí)行游戲,,現(xiàn)在我們能知道輸贏情況了,!



  第十步:音樂和音效  

最后,讓我們給游戲加點音樂和音效吧,!

 

首先,,我們需要把下面這行代碼加到第二部分(#2)末尾:

pygame.mixer.init()

然后把這些代碼加到第三部分(#3)末尾來加載音效并設(shè)置音量:

       

# 3.1 – 載入音頻
hit = pygame.mixer.Sound('resources/audio/explode.wav')
enemy = pygame.mixer.Sound('resources/audio/enemy.wav')
shoot = pygame.mixer.Sound('resources/audio/shoot.wav')
hit.set_volume(0.05)
enemy.set_volume(0.05)
shoot.set_volume(0.05)
pygame.mixer.music.load('resources/audio/moonlight.wav')
pygame.mixer.music.play(-1, 0.0)
pygame.mixer.music.set_volume(0.25)


上面這塊代碼大部分都是用于加載音效文件以及設(shè)置音量的,。不過注意pygame.mixer.music.load這一行 —— 這行用于加載背景音樂,它的下一行則是讓音樂不斷重復播放,。

 

現(xiàn)在,,我們需要讓音效根據(jù)我們的需要進行播放。根據(jù)注釋(#后)的內(nèi)容把代碼放在相應的位置:

       

# 放在# 6.3.1 if badrect.left<>
hit.play()
# 放在#6.3.2 if badrect.colliderect(bullrect):之后
enemy.play()
# 放在#8, if event.type==pygame.MOUSEBUTTONDOWN:之后
shoot.play()


運行游戲,,現(xiàn)在我們有背景音樂和各種音效了,!


  大功告成!

你該為自己感到驕傲,!你剛剛做了一個帶有音樂,,音效,防御者,,攻擊者和其他各種有趣元素的游戲,!

 

當然,你也可以在這些代碼的基礎(chǔ)上加入自己的創(chuàng)新,!比如把獾換成狐貍,,或者升級小兔子的武器等等。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多