<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      pygame小游戲飛機(jī)大戰(zhàn)_10碰撞動(dòng)畫

      通過切換圖片做出動(dòng)畫效果:

      (需要引入多個(gè)圖片進(jìn)行操作)

      
      #  定義碰撞的類
      class Bomb(object):
          # 初始化碰撞
          def __init__(self,screen,type):
              self.screen = screen
              if type == "enemy":
                  # 加載爆炸資源
                  self.mImage = [pygame.image.load("./images/enemy1_down"+str(v)+".png")for v in range(1,5)]
              else:
                  # 加載爆炸資源
                  self.mImage = [pygame.image.load("./images/me_destroy"+str(v)+".png")for v in range(1,5)]
              # 設(shè)置當(dāng)前爆炸播放索引
              self.mIndex = 0
              # 爆炸位置
              self.mPos = [0, 0]
              # 是否可見
              self.mVisible = False

      使爆炸顯示在相應(yīng)的位置:

      def action(self, rect):
          # 觸發(fā)爆炸方法draw
          # 爆炸的坐標(biāo)
          self.mPos[0] = rect.left
          self.mPos[1] = rect.top
          # 打開爆炸的開關(guān)
          self.mVisible = True

      完整代碼

      # 引入random
      import random
      # 引入pygame
      import pygame
      # 引入time模塊
      import time
      # 引入pygame中的所有方法
      from pygame.constants import K_UP, K_RIGHT, K_DOWN, K_LEFT, K_w, K_a, K_s, K_d, K_SPACE
      
      # 定義初始為向右
      direction = "right"
      
      
      # 引入敵方飛機(jī)的類
      class Enemy(pygame.sprite.Sprite):
          def __init__(self, screen):
              # 調(diào)用繼承精靈初始化方法
              pygame.sprite.Sprite.__init__(self)
              # 引入圖片創(chuàng)建敵人
              self.enemy = pygame.image.load("./images/enemy1.png")
              self.image = self.enemy
              # 設(shè)置速度變量
              self.speed = 10  # 降低速度使游戲可玩
              # 根據(jù)圖片進(jìn)行獲取矩形對(duì)象
              self.rect = self.image.get_rect()
              self.rect.topleft = [0, 0]
              self.x = 0
              self.y = 0
              # 使screen變?yōu)轱w機(jī)類的一個(gè)屬性
              self.screen = screen
              # 定義裝子彈的精靈組
              self.bullets = pygame.sprite.Group()
      
          def display(self):
              self.screen.blit(self.enemy, (self.rect.left, self.rect.top))
              # 改為使用精靈組的方法繪制子彈
              self.bullets.update()  # 更新子彈位置
              self.bullets.draw(self.screen)  # 繪制子彈
      
          # 定義移動(dòng)飛機(jī)的方法
          def auto_move(self):
              # 將direction改為全局變量
              global direction
              # 判斷方向進(jìn)行移動(dòng)
              if direction == "right":
                  self.rect.right += self.speed
              if direction == "left":
                  self.rect.right -= self.speed
              # 定義碰壁時(shí)調(diào)整移動(dòng)方向
              if self.rect.right >= 480 - 51:
                  direction = "left"
              if self.rect.right <= 0:
                  direction = "right"
      
          def update(self):
              self.auto_fire()
              self.auto_move()
              self.display()
      
          # 定義自動(dòng)開火的方法
          def auto_fire(self):
              # 使用隨機(jī)數(shù)函數(shù)進(jìn)行隨機(jī)抽取一個(gè)1到10的一個(gè)隨機(jī)數(shù)
              random_number = random.randint(1, 40)
              # 當(dāng)隨機(jī)數(shù)為8時(shí)創(chuàng)建子彈
              if random_number == 8:
                  # 創(chuàng)建單個(gè)子彈
                  bullet = EnemyBullet(self.screen, self.rect.left, self.rect.top)
                  # 將子彈放入列表中
                  self.bullets.add(bullet)
      
      
      # 引入飛機(jī)的類
      class Plane(pygame.sprite.Sprite):
          # 創(chuàng)建玩家的方法,引入screen模塊
          def __init__(self, screen):
              # 引入圖片創(chuàng)建玩家
              self.player = pygame.image.load("./images/me1.png")
              self.image = self.player
              # 設(shè)置速度變量
              self.speed = 5
              # 調(diào)用繼承精靈初始化方法
              pygame.sprite.Sprite.__init__(self)
              # 根據(jù)圖片進(jìn)行獲取矩形對(duì)象
              self.rect = self.image.get_rect()
              self.rect.topleft = [179, 500]
              self.x = 179
              self.y = 500
              # 使screen變?yōu)轱w機(jī)類的一個(gè)屬性
              self.screen = screen
              # 定義裝子彈的列表
              self.bullets = pygame.sprite.Group()
      
          # 定義update方法包含檢測(cè)指令和繪制
          def update(self):
              self.key_control()
              self.display()
      
          # 創(chuàng)建玩家移動(dòng)的方法
          def key_control(self):
              # 判斷按下鍵盤事件,對(duì)玩家x,y坐標(biāo)進(jìn)行調(diào)整使玩家移動(dòng)
              key_pressed = pygame.key.get_pressed()
              if key_pressed[K_w] or key_pressed[K_UP]:
                  self.rect.top -= self.speed
              if key_pressed[K_d] or key_pressed[K_RIGHT]:
                  self.rect.right += self.speed
              if key_pressed[K_a] or key_pressed[K_LEFT]:
                  self.rect.left -= self.speed
              if key_pressed[K_s] or key_pressed[K_DOWN]:
                  self.rect.bottom += self.speed
              if key_pressed[K_SPACE]:
                  # 按下空格鍵發(fā)射子彈
                  bullet = Bullet(self.screen, self.rect.left, self.rect.top)
                  # 將子彈存入列表
                  self.bullets.add(bullet)
      
          def display(self):
              # 繪制玩家
              self.screen.blit(self.player, self.rect)
              # 更新子彈坐標(biāo)
              self.bullets.update()
              # 繪制所有子彈到屏幕
              self.bullets.draw(self.screen)
      
      
      # 引入敵人子彈的類
      class EnemyBullet(pygame.sprite.Sprite):
          def __init__(self, screen, x, y):
              # 調(diào)用繼承精靈初始化方法
              pygame.sprite.Sprite.__init__(self)
              # 引入子彈圖片
              self.image = pygame.image.load("./images/bullet2.png")
              # 根據(jù)圖片進(jìn)行獲取矩形對(duì)象
              self.rect = self.image.get_rect()
              self.rect.topleft = [x + 29 - 2, y + 43]
              self.x = x + 29 - 2
              self.y = y + 43
              # 顯示窗口
              self.screen = screen
              # 定義速度
              self.speed = 4
      
          def update(self):
              # 修改子彈坐標(biāo)
              self.rect.top += self.speed
              # 如果子彈出界,銷毀子彈
              if self.rect.top > 700:
                  self.kill()
      
      
      # 引入子彈的類
      class Bullet(pygame.sprite.Sprite):
          def __init__(self, screen, x, y):
              # 調(diào)用繼承精靈初始化方法
              pygame.sprite.Sprite.__init__(self)
              # 引入子彈圖片
              self.image = pygame.image.load("./images/bullet1.png")
              # 根據(jù)圖片進(jìn)行獲取矩形對(duì)象
              self.rect = self.image.get_rect()
              self.rect.topleft = [x + 51 - 2, y]
              self.x = x + 51 - 2
              self.y = y
              # 顯示窗口
              self.screen = screen
              # 定義速度
              self.speed = 10
      
          def update(self):
              # 修改子彈坐標(biāo)
              self.rect.top -= self.speed
              # 如果子彈出界,銷毀子彈
              if self.rect.top < -22:
                  self.kill()
      
      
      # 定義音樂的類
      class GameSound(object):
          def __init__(self):
              # 初始化主程序
              pygame.mixer.init()
              # 引入背景音樂
              pygame.mixer.music.load("./sound/game_music.ogg")
              # 調(diào)整聲音大小
              pygame.mixer.music.set_volume(0.5)
      
          def PlayMusic(self):
              # 開始播放音樂
              pygame.mixer.music.play(-1)
      
      #  定義碰撞的類
      class Bomb(object):
          # 初始化碰撞
          def __init__(self,screen,type):
              self.screen = screen
              if type == "enemy":
                  # 加載爆炸資源
                  self.mImage = [pygame.image.load("./images/enemy1_down"+str(v)+".png")for v in range(1,5)]
              else:
                  # 加載爆炸資源
                  self.mImage = [pygame.image.load("./images/me_destroy"+str(v)+".png")for v in range(1,5)]
              # 設(shè)置當(dāng)前爆炸播放索引
              self.mIndex = 0
              # 爆炸位置
              self.mPos = [0, 0]
              # 是否可見
              self.mVisible = False
          def action(self, rect):
              # 觸發(fā)爆炸方法draw
              # 爆炸的坐標(biāo)
              self.mPos[0] = rect.left
              self.mPos[1] = rect.top
              # 打開爆炸的開關(guān)
              self.mVisible = True
      
      
      # 創(chuàng)建main函數(shù)創(chuàng)建主程序
      def main():
          sound = GameSound()
          sound.PlayMusic()
          # 創(chuàng)建一個(gè)窗口
          screen = pygame.display.set_mode((480, 700), 0, 32)
          # 引入圖片創(chuàng)建背景
          background = pygame.image.load("./images/background.png")
          # 引入圖片創(chuàng)建玩家
          player = pygame.image.load("./images/me1.png")
          # 引入玩家信息
          player = Plane(screen)
          # 引入敵人信息
          enemy = Enemy(screen)
          # 設(shè)置速度變量
          speed = 10
      
          x = 179
          y = 500
          while True:
              # 繪制背景
              screen.blit(background, (0, 0))
              # 獲取事件
              for event in pygame.event.get():
                  # 如果事件是QUIT事件,如點(diǎn)擊窗口的關(guān)閉按鈕,則退出循環(huán)
                  if event.type == pygame.QUIT:
                      # 執(zhí)行退出游戲
                      pygame.quit
                      # 退出程序
                      exit()
              # 執(zhí)行飛機(jī)按鍵監(jiān)聽
              player.key_control()
              # 顯示飛機(jī)
              player.display()
              # 顯示敵人
              enemy.display()
              # 敵人自動(dòng)移動(dòng)
              enemy.auto_move()
              # 敵人自動(dòng)開火
              enemy.auto_fire()
              # 界面更新
              pygame.display.update()
              # 使程序每次運(yùn)行時(shí)停留0.01秒
              time.sleep(0.01)
      
      
      if __name__ == '__main__':
          main()
       
       
      posted @ 2025-08-20 18:58  賽博郎中  閱讀(71)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 又大又硬又爽免费视频| 亚洲情A成黄在线观看动漫尤物| 国产一区二区三区无遮挡| 国产一区二区三区小说| 九九热精彩视频在线免费| 日韩一区二区在线观看视频| 1区2区3区4区产品不卡码网站| 激情动态图亚洲区域激情| 狠狠色狠狠色综合久久蜜芽 | a级黑人大硬长爽猛出猛进| 久久夜色撩人精品国产av| 午夜福利国产精品视频| 国产线播放免费人成视频播放| 国产粉嫩美女一区二区三| 91九色国产成人久久精品| 亚洲人成在线观看网站不卡| 亚洲高清成人av在线| 午夜福利国产一区二区三区| 美女黄网站人色视频免费国产| 大陆精大陆国产国语精品| 日韩一区二区三区在线观院| 亚洲欧美日韩精品成人| 国产精品日韩专区第一页| 在线观看国产成人AV天堂| 久久精品免视看国产成人| 黄瓜一区二区三区自拍视频| 国产精品国色综合久久| 国产成人精品亚洲资源| 一本本月无码-| 人妻系列中文字幕精品| 日韩有码中文字幕av| 国内精品自线在拍| 丰满人妻一区二区三区色| 亚洲日韩日本中文在线| 最近免费中文字幕大全| 天堂影院一区二区三区四区| 国产三级精品三级在线观看 | 男人天堂亚洲天堂女人天堂| 五大连池市| 豆国产97在线 | 亚洲| brazzers欧美巨大|