重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Pygame框架如何制作飞机大战?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!
成都创新互联公司专业为企业提供双塔网站建设、双塔做网站、双塔网站设计、双塔网站制作等企业网站建设、网页设计与制作、双塔企业网站模板建站服务,10余年双塔做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。具体内容如下
飞机大战主游戏类
""" 项目名称:简单飞机大战游戏 基于框架:Pygame 开发日期:2020.07 开发人员:Y 版本:**** """ import sys # 导入内置模块sys 调用sys.exit() import pygame # 导入第三方模块pygame from plane_sprites import * # 导入自定义模块内所有工具 class PlayGame(object): # 定义开始游戏主类 继承object基类 def __init__(self): # 定义初始化方法 self.srceen = pygame.display.set_mode(SRCEEN_SIZE.size) # 设置游戏主窗口 self.clock = pygame.time.Clock() # 设置游戏时钟 用于刷新屏幕帧率 self.__creat_sprites() # 调用私有方法实现添加精灵类内容 pygame.display.set_caption('飞机大战') # 设置窗口标题 pygame.time.set_timer(CREAT_ENEMY_EVENT, 1000) # 设置事件定时器 用于每隔一段时间执行一次事件 pygame.time.set_timer(FIRE_BULLTE, 300) # 设置事件定时器 用于每隔一段时间执行一次事件 def start_game(self): # 定义开始游戏方法 while True: # 游戏循环 self.clock.tick(CLOCK_TICK) # 利用时钟设置刷新帧率 self.__event_hander() # 调用私有方法实现监听事件 self.__check_collide() # 调用私有方法检测碰撞 self.__update_sprites() # 调用私有方法更新和绘制精灵组 pygame.display.flip() # 更新窗口显示 # pygame.display.update() # 更新窗口显示 def __creat_sprites(self): # 定义添加精灵组方法 bj1 = Background() # 利用背景类创建背景对象1 默认参数Flase 表示第一张图像,需要与屏幕重合 bj2 = Background(True) # 利用背景类创建背景对象2 参数True 表示另一张图像, 在屏幕的正上方 self.bj_group = pygame.sprite.Group(bj1, bj2) # 设置背景精灵组 self.emeny_group = pygame.sprite.Group() # 提前设置敌机精灵组 但并不设置敌机对象 # 敌机类对象是定时被创建的,因此在初始化方法中,不需要创建敌机对象 self.hero = Hero() # 利用英雄类创建英雄对象 注意:后续对英雄做碰撞检测及发射操作,所有需要单独设置为属性 self.hero_group = pygame.sprite.Group(self.hero) # 设置英雄精灵组 def __event_hander(self): # 定义监听事件方法 for event in pygame.event.get(): # 循环监听所有事件 if event.type == pygame.QUIT: # 如果是单击退出按钮事件 PlayGame.__game_over() # 调用私有方法实现结束游戏 elif event.type == CREAT_ENEMY_EVENT: # 如果是执行自定义事件创建敌机 emeny1 = Enemy("./images/enemy1.png") # 利用敌机类创建敌机1 emeny2 = Enemy("./images/enemy2.png") # 利用敌机类创建敌机2 emeny3 = Enemy("./images/enemy3_n1.png") self.emeny_group.add(emeny1, emeny2, emeny3) # 对之前设置好的敌机精灵组进行添加精灵对象 elif event.type == FIRE_BULLTE: # 如果是执行自定义事件发射子弹 self.hero.fire() # 调用英雄对象的发射子弹方法 key_tuple = pygame.key.get_pressed() # 捕获键盘按键返回值为元组 if key_tuple[pygame.K_RIGHT]: # 判断捕获键盘按键为右键 self.hero.speed = 4 # 设置英雄类对象的速度为4 向右移动 elif key_tuple[pygame.K_LEFT]: # 判断捕获键盘按键为左键 self.hero.speed = -4 # 设置英雄类对象的速度为-4 向左移动 else: # 否则 self.hero.speed = 0 # 捕获其余任何按键英雄类对象速度不变 不移动 def __check_collide(self): # 定义检测碰撞方法 pygame.sprite.groupcollide(self.hero.bullet_group, self.emeny_group, True, True) # 两个精灵组中所有的精灵的碰撞检测 属性True, 则发生碰撞的精灵将被自动移除 enemies = pygame.sprite.spritecollide(self.hero, self.emeny_group, True) # 判断某个精灵和指定精灵组中的精灵的碰撞 属性True,则指定精灵组中发生碰撞的精灵将被自动移除 # 返回精灵组中跟精灵发生碰撞的精灵列表 if len(enemies) > 0: # 判断敌机精灵组内精灵是否存在 若存在 self.hero.kill() # 碰撞导致英雄销毁 PlayGame.game_over() # 调用类中结束游戏方法 退出游戏 def __update_sprites(self): # 定义精灵组更新和绘制方法 self.bj_group.update() # 更新背景类精灵 self.bj_group.draw(self.srceen) # 绘制背景类精灵 self.emeny_group.update() # 更新敌机类精灵 self.emeny_group.draw(self.srceen) # 绘制敌机类精灵 self.hero_group.update() # 更新英雄类精灵 self.hero_group.draw(self.srceen) # 绘制英雄类精灵 self.hero.bullet_group.update() # 更新英雄子弹类精灵 self.hero.bullet_group.draw(self.srceen) # 绘制英雄子弹类精灵 @staticmethod # 声明定义静态方法 def __game_over(): # 定义静态方法 print("游戏结束") # 控制台打印游戏结束 pygame.quit() # 卸载所有pygame模块工具 sys.exit() # 退出程序 if __name__ == '__main__': # 判断当前执行 playgame = PlayGame() # 创建开始游戏对象 playgame.start_game() # 调用开始游戏对象的开始方法