<address id="bjr5b"><form id="bjr5b"></form></address>

    <form id="bjr5b"></form>

        <address id="bjr5b"><listing id="bjr5b"><meter id="bjr5b"></meter></listing></address>

          <form id="bjr5b"></form>
          400-650-7353

          精品課程

          您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎知識】飛機大戰——玩家飛機類

          【Python基礎知識】飛機大戰——玩家飛機類

          • 來源:優就業
          • 2021-09-28 10:24:08
          • 閱讀()
          • 分享
          • 手機端入口

          1 玩家飛機類的屬性

          飛機大戰游戲首先要設計的角色是玩家飛機,本小節介紹玩家飛機類涉及的屬性。

          實例屬性中要設置一個游戲窗口屬性,該屬性在類初始化方法中設置。

          玩家飛機將會展示一個飛機的圖片,因此,需要一個image屬性保存本地的正常狀態的玩家飛機圖片路徑,根據這個路徑加載圖片。

          玩家飛機可能會被敵機擊毀,因此,為玩家飛機定義一組保存本地的玩家飛機爆炸圖片路徑的列表,根據這個列表中的路徑加載圖片,并作為玩家飛機類的屬性。

          玩家飛機有一個初始的位置,包含x坐標和y坐標,這也是玩家飛機類的兩個屬性。

          玩家飛機類中定義一個子彈列表屬性,用于存放子彈對象。

          玩家飛機類中定義一個圖片下標變量作為類的屬性,用于控制逐幀將玩家飛機爆炸圖片疊加到背景上。

          玩家飛機類中定義一個標識玩家飛機是否爆炸的布爾變量作為類的屬性。

          玩家飛機類中定義一個碰撞列表屬性,其中定義兩個字典,設置碰撞有效區域。

          創建玩家飛機類HeroPlan,類中定義玩家飛機的屬性,代碼如下:

          1. class HeroPlan(): 
          2.     # 正常狀態的玩家飛機圖片 
          3.     image = ['./img/hero.gif''./img/hero2.png''./img/hero2.png'
          4.     # 爆炸玩家飛機圖片 
          5.     bomb_img = ['./img/hero_blowup_n1.png'
          6.                 './img/hero_blowup_n2.png'
          7.                 './img/hero_blowup_n3.png'
          8.                 './img/hero_blowup_n4.png'
          9.     x = 190   # 初始位置x軸坐標 
          10.     y = 528   # 初始位置y軸坐標 
          11.     biu_list = []   # 玩家飛機子彈列表 
          12.     img_index = 0   # 圖片下標 
          13.     is_bomb = False   # 標識玩家飛機是否爆炸 
          14.     # 碰撞有效區域[{范圍1}, {范圍2}] 
          15.     blast = [{'x': (3565), 'y': (040)}, {'x': (0100), 'y': (40100)}] 

          2 玩家飛機類的方法

          首先定義玩家飛機類的初始化方法,將全局定義的游戲窗口變量賦值給類的實例屬性,代碼如下:

          1. def __init__(self, surface): 
          2.     self.surface = surface 

          玩家飛機類中包含以下方法。

          (1)hero_display()方法

          玩家飛機類中第一個重要方法為hero_display()。該方法的主要功能是在游戲窗口上繪制玩家飛機。

          該方法中首先檢測一個玩家飛機是否爆炸實例屬性is_bomb。如果玩家飛機沒有被擊中,即值為False,那么在設定的坐標位置加載正常狀態的玩家飛機圖片,并繪制到游戲窗口上。如果玩家飛機被敵機擊中,即值為True,那么先檢測爆炸玩家飛機圖片是否顯示到最后一張,若顯示到最后一張,則調用結束畫面并退出游戲,否則根據bomb_img中保存的圖片路徑逐一加載圖片。由于bomb_img是一個列表,保存了玩家飛機爆炸動畫的一系列圖片的本地鏈接,因此需要一個img_index,游戲循環更新時,根據img_index加載合適的圖片,并疊加到游戲窗口中。

          hero_display()方法中還有一個處理子彈的for循環。biu_list列表中沒有項時,就不執行這個for循環。如果玩家按下空格鍵,并且biu_list列表中有項時,在游戲窗口上顯示子彈圖片,然后移動子彈圖片,產生發射子彈的效果。當子彈圖片移動超過了游戲窗口時,刪除biu_list列表中的所有項。

          hero_display()方法在游戲循環中更新,繪制出玩家飛機和子彈,以及玩家飛機被擊中后所執行的一系列操作。

          hero_display()方法的代碼如下:

          1. def hero_display(self): 
          2.     # 檢查玩家飛機是否爆炸 
          3.     if self.is_bomb == False
          4.         self.surface.blit(pygame.image.load(self.image[self.img_index]), (self.x, self.y)) 
          5.     else
          6.         time.sleep(0.5
          7.         if self.img_index == len(self.bomb_img): 
          8.             end_screen_us() 
          9.             exit('游戲結束'
          10.         self.surface.blit(pygame.image.load(self.bomb_img[self.img_index]), (self.x, self.y)) 
          11.         self.img_index += 1   # 用于顯示圖片 
          12.  
          13.     for biu in self.biu_list:   # 在繪制完玩家飛機后,再繪制子彈 
          14.         biu.biu_diplay()   # 繪制子彈到游戲窗口 
          15.         biu.move_up()   # 移動子彈 
          16.         # 超出游戲窗口則刪除越界子彈 
          17.         self.biu_list.remove(biu) if biu.y < 0 else '' 

          (2)fire()方法

          fire()方法先創建子彈實例,再將這個實例存入biu_list列表之中。biu_list作為玩家飛機類的實例屬性,在hero_display()方法中被使用。

          fire()方法的代碼如下:

          1. def fire(self): 
          2.     # 存一顆子彈進入子彈列表 
          3.     self.biu_list.append(Biu(self.surface, self.x, self.y)) 

          (3)move_right()方法

          move_right()方法對玩家飛機精靈的x坐標進行修改,對當前x坐標增加10,即右移,并限制玩家飛機的移動范圍,使其不能移出游戲窗口的右邊界。

          move_right()方法的代碼如下:

          1. # 玩家飛機右移 
          2. def move_right(self): 
          3.     # 限制玩家飛機的移動范圍 
          4.     if self.x < 380
          5.         self.x += 10 

          (4)move_left()方法

          move_left()方法對玩家飛機精靈的x坐標進行修改,對當前x坐標減少10,即左移,并限制玩家飛機的移動范圍,使其不能移出游戲窗口的左邊界。

          move_left()方法的代碼如下:

          1. # 玩家飛機左移 
          2. def move_left(self): 
          3.     # 限制玩家飛機的移動范圍 
          4.     if self.x > 0
          5.         self.x -= 10 

          (5)bomb()方法

          bomb()方法是玩家飛機被擊中后調用的方法。該方法設置玩家飛機類的實例屬性img_index為0;還設置玩家飛機類的實例屬性is_bomb為True,用于標識玩家飛機被擊中爆炸了。

          bomb()方法的代碼如下:

          1. def bomb(self): 
          2.     self.img_index = 0 
          3.     self.is_bomb = True 

           

          學習疑問申請解答
          您的姓名
          您的電話
          意向課程
           

          中公優就業

          IT小助手

          掃描上方二維碼添加好友,請備注:599,享學習福利。

          >>本文地址:
          注:本站稿件未經許可不得轉載,轉載請保留出處及源文件地址。

          推薦閱讀

          優就業:ujiuye

          關注中公優就業官方微信

          • 關注微信回復關鍵詞“大禮包”,享學習福利
          QQ交流群
          在線疑問解答
          (加群備注“網站”)
          IT培訓交流群 加入群聊 +
          軟件測試 加入群聊 +
          全鏈路UI/UE設計 加入群聊 +
          Python+人工智能 加入群聊 +
          互聯網營銷 加入群聊 +
          Java開發 加入群聊 +
          PHP開發 加入群聊 +
          VR/AR游戲開發 加入群聊 +
          大前端 加入群聊 +
          大數據 加入群聊 +
          Linux云計算 加入群聊 +
          優就業官方微信
          掃碼回復關鍵詞“大禮包”
          享學習福利

          測一測
          你適合學哪門IT技術?

          1 您的年齡

          2 您的學歷

          3 您更想做哪個方向的工作?

          獲取測試結果
           
          課程資料、活動優惠 領取通道
           
           
          国产成人精品亚洲日本语言
          <address id="bjr5b"><form id="bjr5b"></form></address>

            <form id="bjr5b"></form>

                <address id="bjr5b"><listing id="bjr5b"><meter id="bjr5b"></meter></listing></address>

                  <form id="bjr5b"></form>