• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

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

       長沙7喜 2018-01-29

      (游戲展示)

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


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

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

      (最終效果)


        準備工作:安裝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的集成開發學習環境(Integrated Development and Learning Environment)。運行IDLE就可以開始愉快地寫碼了!

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

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

      PyGame是Python的一個庫(library)。Python有很多這樣的庫,庫內自帶能完成各種功能的許多函數(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,如果沒有出現任何提示,PyGame就安裝成功了!


        運行文件中的Python代碼  

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


        添加游戲素材  

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

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

      我們現在可以開始做小兔子和獾了!


        第一步:添加小兔子  

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

      # 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 – 不斷循環
      while 1:
          # 5 – 每次繪圖前清除屏幕
          screen.fill(0)
          # 6 – 繪制屏幕組成元素
          screen.blit(player, (100,100))
          # 7 – 刷新屏幕
          pygame.display.flip()
          # 8 – 循環事件
          for event in pygame.event.get():
              # 檢驗事件是否是X鍵
              if event.type==pygame.QUIT:
                  # 如果是的話就退出游戲
                  pygame.quit()
                  exit(0)

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

      現在讓我們一步步分析上面的代碼:

      1.     導入pygame庫

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

      2.     初始化游戲

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

      3.     載入圖片

      載入小兔子的圖片。

      4.     不斷循環

      循環執行被縮進(前面有空格)的代碼。


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


      5.     每次繪圖前清除屏幕

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

      6.     繪制屏幕組成元素

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

      7.     刷新屏幕

      8.     循環事件

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


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


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

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

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


        第二步:制作游戲場景  

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


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


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


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

      在第六部分(#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進行循環。在這一層循環中,代碼又通過y進行內層循環,然后把草坪圖片放在循環得到的x, y 坐標上。接下來的幾行代碼在屏幕上放置堡壘(castle)。


      如果你現在執行程序,你將看到下圖的場景:

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


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

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


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

             

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


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


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


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

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

      改為:

         screen.blit(player, playerpos)

      接下來,我們要使用PyGame自帶的event.key函數來檢測玩家按下了什么鍵,并相應地將keys內的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數列中的值。

       

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

             

      # 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,你的小兔子動起來了!


        第四步:讓小兔子轉向  

      現在,你的小兔子可以根據你的按鍵移動了!


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

       

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

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

       

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

       

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


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


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

       import math

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

             

      # 6.1 – 設定小兔子的位置并讓它轉向
      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函數得到角度。然后,我們要將atan2函數得到的角度從弧度制(radians)轉化為角度制(degrees)(把弧度乘以57.29或者360/2π)。

       

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

       

      再次運行游戲。現在,如果你移動你的鼠標,小兔子也會跟著轉動了!


        第五步:小兔子,射擊!

      你的小兔子已經能夠轉動了,現在讓我們給它添加一些動作!讓小兔子在敵人來襲的時候向敵人射箭!

       

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

       

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

             

      acc=[0,0]
      arrows=[]


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

       

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

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

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

             

      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])


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

       

      我們現在要讓弓箭顯示在屏幕上,把下面的代碼加在#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的值都是用基本的三角函數計算出來的。10是弓箭的速度。if語句用于檢測弓箭是否超出了窗口范圍,如果超出的話,就把超出的弓箭從列表中刪去。第二個for語句對所有弓箭進行循環,并畫出它們正確的位置和角度。

       

      現在運行游戲,

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


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

      好,現在我們造出了堡壘,也有了保衛城堡的主角兔子,是時候讓敵人上場了!

       

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

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

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

      3.     把獾顯示在屏幕上

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

             

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


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

       

      把下面兩行代碼加到第三部分(#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,如果是的話,就產生一只新獾,并根據badtimer已經被重設的次數來重新設置badtimer的值。第一個for循環更新了獾的x坐標,檢測獾是否超出了屏幕范圍,如果超出的話,就把它刪除出列表。第二個for循環讓所有在屏幕范圍內的獾顯示在屏幕上。

       

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

       import random

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

      badtimer-=1

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

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

       

      把這些代碼加到#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點(之后,我們將把健康值顯示在屏幕上)。

       

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


        第七步:成功擊中敵人!

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

       

      為了讓弓箭射殺敵人,我們要對所有的獾進行循環,并在這一層循環中,對所有的弓箭進行循環,檢測這些弓箭是否射到了獾。如果射到了,就刪掉獾和弓箭,并給準確度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自帶的函數,能夠檢測兩個矩形是否相交。剩下的代碼執行的任務就和前面解釋的一樣。

       

      如果你執行這個程序,會發現小兔子能夠射殺敵人了!


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

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

       

      首先把下面的代碼加在第七部分(#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)


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

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

             

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


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

      現在把下面的代碼添加在#6.4之后

             

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


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

       

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


        第九步:揭曉勝負  

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

       

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

       

      現在我們確定一下大致的勝負規則:

       

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

      ·        停止運行游戲

      ·        把游戲結果設置為1(即勝利)

       

      如果堡壘都被摧毀了

      ·        停止運行游戲

      ·        把游戲結果設置為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]轉化為浮點數。如果不將其轉化為浮點數的話,計算的結果將是整數而不是小數。


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

       

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

             

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


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

             

      # 4 – 不斷循環
      while 1:
          badtimer-=1

      改為:

      # 4 – 不斷循環

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


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

       

      再次執行游戲,現在我們能知道輸贏情況了!



        第十步:音樂和音效  

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

       

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

      pygame.mixer.init()

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

             

      # 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)


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

       

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

             

      # 放在# 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()


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


        大功告成!

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

       

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

       

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

        0條評論

        發表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 久久精品国产亚洲AV瑜伽| 丁香婷婷激情俺也去俺来也| 免费现黄频在线观看国产| 手机看片AV永久免费| 制服 丝袜 亚洲 中文 综合| 女人的天堂A国产在线观看| 亚洲精品国产精品乱码视色| 国产一区二区四区不卡| 无码精品人妻一区二区三区中| 制服丝袜美腿一区二区| 在线观看国产成人AV天堂| 成人网站WWW污污污网站| 亚洲伊人五月丁香激情| 中文字幕AV无码人妻| 亚洲天堂在线观看完整版| 午夜无码片在线观看影院A| 亚洲高清WWW色好看美女| 亚洲成A人一区二区三区| 亚洲伊人五月丁香激情| 久久99国产精品尤物| 成人无码视频97免费| 亚洲另类丝袜综合网| 亚洲AV中文无码乱人伦在线视色| 无码日韩做暖暖大全免费不卡| 日韩亚洲AV人人夜夜澡人人爽| 成人爽A毛片免费视频| 桃子视频在线播放WWW| AV区无码字幕中文色| 国产超碰无码最新上传| 丰满少妇被猛烈进入高清播放 | 97人人添人澡人人爽超碰| 丁香五月亚洲综合在线国内自拍| 老熟妇高潮一区二区三区| 一本之道高清乱码少妇 | 免费无码VA一区二区三区| 重口SM一区二区三区视频| 无码人妻aⅴ一区二区三区蜜桃| 久久WWW免费人成一看片| 亚洲欧美日韩成人综合一区 | 久久精品夜夜夜夜夜久久| 国产网友愉拍精品视频手机|