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

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

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

      pygame小游戲飛機大戰_13地圖移動

      飛機飛行時使地圖移動可以讓游戲看起來更加自然所以加入地圖移動的操作:

      將原本地圖大小格式定義為數組方便后續操作:

      bg_size = (480,700)
      
      def __init__(self):
          # 創建窗口
          self.screen = pygame.display.set_mode(Manager.bg_size, 0, 32)

      創建地圖類,用兩個相同的背景圖片切換實現地圖的移動

       

      class BackGround :
          # 初始化地圖
          def __init__(self,screen):
              self.mImage1 = pygame.image.load("./images/background.png")
              self.mImage2 = pygame.image.load("./images/background.png")
              # 窗口
              self.screen = screen
              # 輔助移動
              self.y1 =0
              # 銜接地圖y軸
              self.y2 =-Manager.bg_size[1]
          def draw(self):
              self.screen.blit(self.mImage1,(0,self.y1))
              self.screen.blit(self.mImage2,(0,self.y2))
          def move(self):
              self.y1+=2
              self.y2 += 2
              if self.y1 >= Manager.bg_size[1]:
                  self.y1=0
              if self.y2 >= 0:
                  self.y2 = -Manager.bg_size[1]

      在Manager中創建背景圖片:

      def __init__(self):
          # 創建窗口
          self.screen = pygame.display.set_mode(Manager.bg_size, 0, 32)
          # 創建背景圖片
          #self.background = pygame.image.load("./images/background.png")
          self.map = BackGround(self.screen)

      引入圖片:

      while True:
          # 把背景圖片貼到窗口
          # self.screen.blit(self.background, (0, 0))
          # 移動地圖
          self.map.move()
          # 把地圖貼到窗口上
          self.map.draw()

      完整代碼:

      # 引入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"
      
      
      # 引入敵方飛機的類
      class Enemy(pygame.sprite.Sprite):
          def __init__(self, screen):
              # 調用繼承精靈初始化方法
              pygame.sprite.Sprite.__init__(self)
              # 引入圖片創建敵人
              self.enemy = pygame.image.load("./images/enemy1.png")
              self.image = self.enemy
              # 設置速度變量
              self.speed = 10  # 降低速度使游戲可玩
              # 根據圖片進行獲取矩形對象
              self.rect = self.image.get_rect()
              self.rect.topleft = [0, 0]
              self.x = 0
              self.y = 0
              # 使screen變為飛機類的一個屬性
              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)  # 繪制子彈
      
          # 定義移動飛機的方法
          def auto_move(self):
              # 將direction改為全局變量
              global direction
              # 判斷方向進行移動
              if direction == "right":
                  self.rect.right += self.speed
              if direction == "left":
                  self.rect.right -= self.speed
              # 定義碰壁時調整移動方向
              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):
              # 使用隨機數函數進行隨機抽取一個1到10的一個隨機數
              random_number = random.randint(1, 40)
              # 當隨機數為8時創建子彈
              if random_number == 8:
                  # 創建單個子彈
                  bullet = EnemyBullet(self.screen, self.rect.left, self.rect.top)
                  # 將子彈放入列表中
                  self.bullets.add(bullet)
      
      
      # 引入飛機的類
      class Plane(pygame.sprite.Sprite):
          # 創建玩家的方法,引入screen模塊
          def __init__(self, screen):
              # 引入圖片創建玩家
              self.player = pygame.image.load("./images/me1.png")
              self.image = self.player
              # 設置速度變量
              self.speed = 5
              # 調用繼承精靈初始化方法
              pygame.sprite.Sprite.__init__(self)
              # 根據圖片進行獲取矩形對象
              self.rect = self.image.get_rect()
              self.rect.topleft = [179, 500]
              self.x = 179
              self.y = 500
              # 使screen變為飛機類的一個屬性
              self.screen = screen
              # 定義裝子彈的列表
              self.bullets = pygame.sprite.Group()
      
          # 定義update方法包含檢測指令和繪制
          def update(self):
              self.key_control()
              self.display()
      
          # 創建玩家移動的方法
          def key_control(self):
              # 判斷按下鍵盤事件,對玩家x,y坐標進行調整使玩家移動
              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]:
                  # 按下空格鍵發射子彈
                  bullet = Bullet(self.screen, self.rect.left, self.rect.top)
                  # 將子彈存入列表
                  self.bullets.add(bullet)
      
          def display(self):
              # 繪制玩家
              self.screen.blit(self.player, self.rect)
              # 更新子彈坐標
              self.bullets.update()
              # 繪制所有子彈到屏幕
              self.bullets.draw(self.screen)
      
      
      # 引入敵人子彈的類
      class EnemyBullet(pygame.sprite.Sprite):
          def __init__(self, screen, x, y):
              # 調用繼承精靈初始化方法
              pygame.sprite.Sprite.__init__(self)
              # 引入子彈圖片
              self.image = pygame.image.load("./images/bullet2.png")
              # 根據圖片進行獲取矩形對象
              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):
              # 修改子彈坐標
              self.rect.top += self.speed
              # 如果子彈出界,銷毀子彈
              if self.rect.top > 700:
                  self.kill()
      
      
      # 引入子彈的類
      class Bullet(pygame.sprite.Sprite):
          def __init__(self, screen, x, y):
              # 調用繼承精靈初始化方法
              pygame.sprite.Sprite.__init__(self)
              # 引入子彈圖片
              self.image = pygame.image.load("./images/bullet1.png")
              # 根據圖片進行獲取矩形對象
              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):
              # 修改子彈坐標
              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")
              # 調整聲音大小
              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)]
              # 設置當前爆炸播放索引
              self.mIndex = 0
              # 爆炸位置
              self.mPos = [0, 0]
              # 是否可見
              self.mVisible = False
      
          def action(self, rect):
              # 觸發爆炸方法draw
              # 爆炸的坐標
              self.mPos[0] = rect.left
              self.mPos[1] = rect.top
              # 打開爆炸的開關
              self.mVisible = True
              # 重置索引
              self.mIndex = 0
      
          def draw(self):
              if not self.mVisible:
                  return
      
              # 繪制當前爆炸幀
              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 BackGround :
          # 初始化地圖
          def __init__(self,screen):
              self.mImage1 = pygame.image.load("./images/background.png")
              self.mImage2 = pygame.image.load("./images/background.png")
              # 窗口
              self.screen = screen
              # 輔助移動
              self.y1 =0
              # 銜接地圖y軸
              self.y2 =-Manager.bg_size[1]
          def draw(self):
              self.screen.blit(self.mImage1,(0,self.y1))
              self.screen.blit(self.mImage2,(0,self.y2))
          def move(self):
              self.y1+=2
              self.y2 += 2
              if self.y1 >= Manager.bg_size[1]:
                  self.y1=0
              if self.y2 >= 0:
                  self.y2 = -Manager.bg_size[1]
      class Manager(object):
          bg_size = (480,700)
      
          def __init__(self):
              # 創建窗口
              self.screen = pygame.display.set_mode(Manager.bg_size, 0, 32)
              # 創建背景圖片
              #self.background = pygame.image.load("./images/background.png")
              self.map = BackGround(self.screen)
              # 初始化一個裝玩家精靈的group
              self.players = pygame.sprite.Group()
              # 初始化一個裝敵機精靈的group
              self.enemys = pygame.sprite.Group()
              # 初始化一個玩家爆炸的對象
              self.player_bomb = Bomb(self.screen, 'player')
              # 初始化一個敵機爆炸的對象
              self.enemy_bomb = Bomb(self.screen, 'enemy')
              # 初始化一個聲音播放的對象
              self.sound = GameSound()
      
          def exit(self):
              print('退出')
              pygame.quit()
              exit()
      
          def new_player(self):
              # 創建飛機對象 添加到玩家的組
              player = Plane(self.screen)
              self.players.add(player)
      
          def new_enemy(self):
              # 創建敵機的對象 添加到敵機的組
              enemy = Enemy(self.screen)
              self.enemys.add(enemy)
      
          def main(self):
              # 播放背景音樂
              self.sound.PlayMusic()
              # 創建一個玩家
              self.new_player()
              # 創建一個敵機
              self.new_enemy()
      
              while True:
                  # 把背景圖片貼到窗口
                  # self.screen.blit(self.background, (0, 0))
                  # 移動地圖
                  self.map.move()
                  # 把地圖貼到窗口上
                  self.map.draw()
                  # 遍歷所有的事件
                  for event in pygame.event.get():
                      # 判斷事件類型如果是pygame的退出
                      if event.type == pygame.QUIT:
                          self.exit()
      
                  # 玩家飛機和子彈的顯示
                  self.players.update()
                  # 敵機和子彈的顯示
                  self.enemys.update()
      
                  # 繪制爆炸效果
                  self.player_bomb.draw()
                  self.enemy_bomb.draw()
      
                  # 刷新窗口內容
                  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)
                      # 敵機爆炸圖片
                      self.enemy_bomb.action(y.rect)
      
                      # 重新創建玩家和敵機
                      self.new_player()
                      self.new_enemy()
                      # 加入聲音
                      self.sound.playBombSound()
      
      
      if __name__ == "__main__":
          # 初始化pygame
          pygame.init()
          manager = Manager()
          manager.main()

      演示如下:

      屏幕錄制 2025-08-26 205624

       

      posted @ 2025-08-26 20:57  賽博郎中  閱讀(37)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 夜爽8888视频在线观看| 久久久av男人的天堂| 又粗又硬又黄a级毛片| 国产做a爱片久久毛片a片| 午夜在线观看成人av| 一区二区三区av天堂| 久久精品蜜芽亚洲国产AV| 国产精品视频一区二区噜| 欧美性群另类交| 国内自拍av在线免费| 四虎成人精品在永久免费| 精品午夜福利短视频一区| 最新亚洲人成网站在线影院| 午夜精品久久久久久久爽 | 精品偷拍一区二区三区在| 亚洲精品日韩在线观看| 久久影院综合精品| 国产盗摄视频一区二区三区| 白丝乳交内射一二三区| 国产欧美日韩另类在线专区| 伊人天天久大香线蕉av色| 国产成人综合在线女婷五月99播放 | 国产久爱免费精品视频| 亚洲熟女国产熟女二区三区| 亚洲中文字幕无码一区日日添| 国产亚洲精品自在久久vr| 国产精品老熟女乱一区二区 | 亚洲第一精品一二三区| 亚洲色大成网站www永久男同| 亚洲老妇女亚洲老熟女久| 色一情一乱一伦麻豆| 97免费人妻在线视频| 国产一区二区三区不卡观| 欧美成本人视频免费播放| 国产精品无码制服丝袜| 自慰无码一区二区三区| 极品白嫩少妇无套内谢| 艳妇乳肉豪妇荡乳av| 国产亚洲欧美日韩俺去了| 中文字幕av一区二区| 国产一区二区三区内射高清|