<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)_12bomb函數(shù)優(yōu)化,加入爆炸音效

      #  定義碰撞的類
      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
              # 重置索引
              self.mIndex = 0
      
          def draw(self):
              if not self.mVisible:
                  return
      
              # 繪制當(dāng)前爆炸幀
              self.screen.blit(self.mImage[self.mIndex], (self.mPos[0], self.mPos[1]))
      
              # 更新索引
              self.mIndex += 1
              if self.mIndex >= len(self.mImage):
                  self.mVisible = False
                  self.mIndex = 0

       

      完整代碼:

      # 引入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)行獲取矩形對象
              self.rect = self.image.get_rect()
              self.rect.topleft = [0, 0]
              self.x = 0
              self.y = 0
              # 使screen變?yōu)轱w機(jī)類的一個屬性
              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)  # 繪制子彈
      
          # 定義移動飛機(jī)的方法
          def auto_move(self):
              # 將direction改為全局變量
              global direction
              # 判斷方向進(jìn)行移動
              if direction == "right":
                  self.rect.right += self.speed
              if direction == "left":
                  self.rect.right -= self.speed
              # 定義碰壁時調(diào)整移動方向
              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()
      
          # 定義自動開火的方法
          def auto_fire(self):
              # 使用隨機(jī)數(shù)函數(shù)進(jìn)行隨機(jī)抽取一個1到10的一個隨機(jī)數(shù)
              random_number = random.randint(1, 40)
              # 當(dāng)隨機(jī)數(shù)為8時創(chuàng)建子彈
              if random_number == 8:
                  # 創(chuàng)建單個子彈
                  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)行獲取矩形對象
              self.rect = self.image.get_rect()
              self.rect.topleft = [179, 500]
              self.x = 179
              self.y = 500
              # 使screen變?yōu)轱w機(jī)類的一個屬性
              self.screen = screen
              # 定義裝子彈的列表
              self.bullets = pygame.sprite.Group()
      
          # 定義update方法包含檢測指令和繪制
          def update(self):
              self.key_control()
              self.display()
      
          # 創(chuàng)建玩家移動的方法
          def key_control(self):
              # 判斷按下鍵盤事件,對玩家x,y坐標(biāo)進(jìn)行調(diào)整使玩家移動
              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)行獲取矩形對象
              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)行獲取矩形對象
              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)
      
              self.__bomb = pygame.mixer.Sound('./sound/get_bomb.wav')
      
      
          def playBombSound(self):
              pygame.mixer.Sound.play(self.__bomb)
      
          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
              # 重置索引
              self.mIndex = 0
      
          def draw(self):
              if not self.mVisible:
                  return
      
              # 繪制當(dāng)前爆炸幀
              self.screen.blit(self.mImage[self.mIndex], (self.mPos[0], self.mPos[1]))
      
              # 更新索引
              self.mIndex += 1
              if self.mIndex >= len(self.mImage):
                  self.mVisible = False
                  self.mIndex = 0
      
      
      class Manager(object):
          def __init__(self):
              # 創(chuàng)建窗口
              self.screen = pygame.display.set_mode((480, 700), 0, 32)
              # 創(chuàng)建背景圖片
              self.background = pygame.image.load("./images/background.png")
              # 初始化一個裝玩家精靈的group
              self.players = pygame.sprite.Group()
              # 初始化一個裝敵機(jī)精靈的group
              self.enemys = pygame.sprite.Group()
              # 初始化一個玩家爆炸的對象
              self.player_bomb = Bomb(self.screen, 'player')
              # 初始化一個敵機(jī)爆炸的對象
              self.enemy_bomb = Bomb(self.screen, 'enemy')
              # 初始化一個聲音播放的對象
              self.sound = GameSound()
      
          def exit(self):
              print('退出')
              pygame.quit()
              exit()
      
          def new_player(self):
              # 創(chuàng)建飛機(jī)對象 添加到玩家的組
              player = Plane(self.screen)
              self.players.add(player)
      
          def new_enemy(self):
              # 創(chuàng)建敵機(jī)的對象 添加到敵機(jī)的組
              enemy = Enemy(self.screen)
              self.enemys.add(enemy)
      
          def main(self):
              # 播放背景音樂
              self.sound.PlayMusic()
              # 創(chuàng)建一個玩家
              self.new_player()
              # 創(chuàng)建一個敵機(jī)
              self.new_enemy()
      
              while True:
                  # 把背景圖片貼到窗口
                  self.screen.blit(self.background, (0, 0))
      
                  # 遍歷所有的事件
                  for event in pygame.event.get():
                      # 判斷事件類型如果是pygame的退出
                      if event.type == pygame.QUIT:
                          self.exit()
      
                  # 玩家飛機(jī)和子彈的顯示
                  self.players.update()
                  # 敵機(jī)和子彈的顯示
                  self.enemys.update()
      
                  # 繪制爆炸效果
                  self.player_bomb.draw()
                  self.enemy_bomb.draw()
      
                  # 刷新窗口內(nèi)容
                  pygame.display.update()
                  time.sleep(0.01)
      
                  # 判斷碰撞
                  iscollide = pygame.sprite.groupcollide(self.players, self.enemys, True, True)
      
                  if iscollide:
                      items = list(iscollide.items())[0]
                      print(items)
                      x = items[0]
                      y = items[1][0]
                      # 玩家爆炸圖片
                      self.player_bomb.action(x.rect)
                      # 敵機(jī)爆炸圖片
                      self.enemy_bomb.action(y.rect)
      
                      # 重新創(chuàng)建玩家和敵機(jī)
                      self.new_player()
                      self.new_enemy()
                      # 加入聲音
                      self.sound.playBombSound()
      
      
      if __name__ == "__main__":
          # 初始化pygame
          pygame.init()
          manager = Manager()
          manager.main()

      演示如下:

      屏幕錄制 2025-08-23 203828

      posted @ 2025-08-23 20:39  賽博郎中  閱讀(43)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 小鲜肉自慰网站xnxx| 国产精品综合在线免费看| 十九岁的日本电影免费观看| 久久精品夜夜夜夜夜久久| 国产一区二区三区我不卡| 精品无码成人片一区二区98 | 欧美国产日韩在线三区| 人妻中文字幕在线视频无码| 国产h视频在线观看| 国产一区二区日韩经典| 浏阳市| 内射干少妇亚洲69XXX| 亚洲午夜理论片在线观看| 亚洲中文无码av永久不收费| 国产精品久久露脸蜜臀| 国产一区在线观看不卡| av午夜福利一片看久久| 国产极品美女高潮无套| 国产午夜福利av在线麻豆| 国产又黄又爽又刺激的免费网址| 久久精品不卡一区二区| 日韩一区二区三区理伦片| 中国xxx农村性视频| 中文熟妇人妻av在线| 4399理论片午午伦夜理片| 欧美三级中文字幕在线观看| 无码国产一区二区三区四区| 久久亚洲日韩精品一区二区三区| 中文字幕亚洲无线码A| 欧美xxxx做受欧美.88| 日韩一区二区在线看精品| 人妻内射一区二区在线视频| 天堂va蜜桃一区二区三区| 亚洲国产高清av网站| 一区二区三区在线色视频| 亚洲日韩VA无码中文字幕| 欧美人成在线播放网站免费| 亚洲中文字幕国产精品| 国产良妇出轨视频在线观看| 国产精品国产三级国av| 欧美日韩不卡合集视频|