找回密码
 立即注册
首页 业界区 安全 pygame小游戏飞机大战_10碰撞检测

pygame小游戏飞机大战_10碰撞检测

公新蕾 6 天前
通过切换图片做出动画效果:
(需要引入多个图片进行操作)
  1. #  定义碰撞的类
  2. class Bomb(object):
  3.     # 初始化碰撞
  4.     def __init__(self,screen,type):
  5.         self.screen = screen
  6.         if type == "enemy":
  7.             # 加载爆炸资源
  8.             self.mImage = [pygame.image.load("./images/enemy1_down"+str(v)+".png")for v in range(1,5)]
  9.         else:
  10.             # 加载爆炸资源
  11.             self.mImage = [pygame.image.load("./images/me_destroy"+str(v)+".png")for v in range(1,5)]
  12.         # 设置当前爆炸播放索引
  13.         self.mIndex = 0
  14.         # 爆炸位置
  15.         self.mPos = [0, 0]
  16.         # 是否可见
  17.         self.mVisible = False
复制代码
使爆炸显示在相应的位置:
  1. def action(self, rect):
  2.     # 触发爆炸方法draw
  3.     # 爆炸的坐标
  4.     self.mPos[0] = rect.left
  5.     self.mPos[1] = rect.top
  6.     # 打开爆炸的开关
  7.     self.mVisible = True
复制代码
完整代码
  1. # 引入randomimport random# 引入pygameimport 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  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)    def PlayMusic(self):        # 开始播放音乐        pygame.mixer.music.play(-1)#  定义碰撞的类
  2. class Bomb(object):
  3.     # 初始化碰撞
  4.     def __init__(self,screen,type):
  5.         self.screen = screen
  6.         if type == "enemy":
  7.             # 加载爆炸资源
  8.             self.mImage = [pygame.image.load("./images/enemy1_down"+str(v)+".png")for v in range(1,5)]
  9.         else:
  10.             # 加载爆炸资源
  11.             self.mImage = [pygame.image.load("./images/me_destroy"+str(v)+".png")for v in range(1,5)]
  12.         # 设置当前爆炸播放索引
  13.         self.mIndex = 0
  14.         # 爆炸位置
  15.         self.mPos = [0, 0]
  16.         # 是否可见
  17.         self.mVisible = False    def action(self, rect):        # 触发爆炸方法draw        # 爆炸的坐标        self.mPos[0] = rect.left        self.mPos[1] = rect.top        # 打开爆炸的开关        self.mVisible = True# 创建main函数创建主程序def main():    sound = GameSound()    sound.PlayMusic()    # 创建一个窗口    screen = pygame.display.set_mode((480, 700), 0, 32)    # 引入图片创建背景    background = pygame.image.load("./images/background.png")    # 引入图片创建玩家    player = pygame.image.load("./images/me1.png")    # 引入玩家信息    player = Plane(screen)    # 引入敌人信息    enemy = Enemy(screen)    # 设置速度变量    speed = 10    x = 179    y = 500    while True:        # 绘制背景        screen.blit(background, (0, 0))        # 获取事件        for event in pygame.event.get():            # 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环            if event.type == pygame.QUIT:                # 执行退出游戏                pygame.quit                # 退出程序                exit()        # 执行飞机按键监听        player.key_control()        # 显示飞机        player.display()        # 显示敌人        enemy.display()        # 敌人自动移动        enemy.auto_move()        # 敌人自动开火        enemy.auto_fire()        # 界面更新        pygame.display.update()        # 使程序每次运行时停留0.01秒        time.sleep(0.01)if __name__ == '__main__':    main()
复制代码
 
您需要登录后才可以回帖 登录 | 立即注册