本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下
实现的效果如下:
进口pygame 从plane_sprites进口* 类PlaneGame(对象): ”““飞机大战主游戏”“ def __init__(自我): 打印(“游戏初始化”) # 1,绘制屏幕窗口 自我。屏幕=pygame.display.set_mode (SCREEN_RECT.size) # 2,创建时钟 自我。时钟=pygame.time.Clock () # 3,调用私有方法,精灵和精灵组的创建 self.sprite_creat () # 4,设置定时器事件,创建敌机 pygame.time。set_timer (CREATE_ENEMY_EVENT, 400) pygame.time。set_timer (HERO_FIRE_EVENT, 200) def sprite_creat(自我): bg1=背景() bg2=背景(真正的) 自我。bg_group=pygame.sprite。集团(bg1 bg2) 自我。enemy_group=pygame.sprite.Group () #创建英雄的精灵和精灵组 自我。英雄=英雄() 自我。hero_group=pygame.sprite.Group (self.hero) def start_game(自我): 打印(“游戏开始……”) 而真正的: # 1,设置刷新帧率 self.clock.tick (FRAME_PER_SEC) # 2,事件监听 self.__event_handle () # 3,碰撞检测 self.__check_collide () # 4,更新/绘制精灵和精灵组 self.__updtae_sprites () # 5,更新显示 pygame.display.update () def __event_handle(自我): 在pygame.event.get事件(): 如果事件。类型==pygame.QUIT: PlaneGame.__game_over () elif事件。类型==CREATE_ENEMY_EVENT: 打印(“敌机出场…”) #创建敌机精灵 敌人的敌人=() #敌机精灵添加到敌机精灵组 self.enemy_group.add(敌人) elif事件。类型==HERO_FIRE_EVENT: self.hero.fire () #移动英雄 keys_pressed=pygame.key.get_pressed () 如果keys_pressed (pygame.K_RIGHT): self.hero。速度=5 elif keys_pressed [pygame.K_LEFT]: self.hero。速度=5 其他: self.hero。速度=0 def __check_collide(自我): pygame.sprite.groupcollide (self.hero。子弹,自我。enemy_group,真的,真的) 敌人=pygame.sprite.spritecollide(自我。英雄,自我。enemy_group,真的) 如果len(敌人)的在0: self.hero.kill () PlaneGame.__game_over () def __updtae_sprites(自我): self.bg_group.update () self.bg_group.draw (self.screen) self.enemy_group.update () self.enemy_group.draw (self.screen) self.hero_group.update () self.hero_group.draw (self.screen) self.hero.bullets.update () self.hero.bullets.draw (self.screen) @staticmethod def __game_over (): 打印(“游戏结束了”) pygame.quit () 退出() if __name__==癬_main__”: #创建游戏对象 游戏=PlaneGame () #启动游戏 game.start_game () >之前
各个类的代码如下:
进口pygame 进口随机 #屏幕大小 SCREEN_RECT=pygame。矩形(0,0,480,700) #刷新帧率 FRAME_PER_SEC=60 #创建敌机的定时器常量 CREATE_ENEMY_EVENT=pygame.USEREVENT #创建发射子弹事件常量 HERO_FIRE_EVENT=pygame。USEREVENT + 1 类GameSprite (pygame.sprite.Sprite): def __init__(自我、image_name速度=1): super () . __init__ () 自我。形象=pygame.image.load (image_name) 自我。矩形=self.image.get_rect () 自我。速度=速度 def(自我更新): self.rect。y +=self.speed 类背景(GameSprite): def __init__(自我,is_alt=False): 超级(). __init__ (“。/feiji/background.png”) 如果is_alt: self.rect。y=-self.rect.height def(自我更新): self.rect。y +=self.speed #自我。速度+=0.0001 #判断背景图片是否移出屏幕窗口 如果self.rect。y比;SCREEN_RECT.height: self.rect。y=-self.rect.height 阶级敌人(GameSprite): def __init__(自我): 超级(). __init__ (“。/feiji/enemy0.png”) #随机敌机的速度 自我。速度=随机的。randint (2、5) #随机敌机的水平位置 self.rect。x=随机的。randint (0, (SCREEN_RECT.width-self.rect.width)) def(自我更新): super () .update () #判断敌机是否移出屏幕 如果self.rect。y比;SCREEN_RECT.height: 打印(“飞出屏幕……”) #将敌机从敌机精灵组中删除 self.kill () def __del__(自我): 打印(“删除敌机”) 类英雄(GameSprite): ”““英雄类”“” def __init__(自我): 超级(英雄,自我). __init__ (“。/feiji/hero1。png”, 0) self.rect。centerx=SCREEN_RECT.centerx self.rect。底=SCREEN_RECT。底- 80 自我。子弹=pygame.sprite.Group () def(自我更新): self.rect。x +=self.speed 如果self.rect。x & lt;=0: self.rect。x=0 elif self.rect。x祝辞=(SCREEN_RECT。宽度- self.rect.width): self.rect。x=SCREEN_RECT。宽度——self.rect.width def火(自我): #创建子弹精灵 子弹=() #设置子弹精灵的位置 bullet.rect。底=self.rect。y 5 bullet.rect。centerx=self.rect.centerx #将子弹精灵添加到子弹精灵组中去 self.bullets.add(子弹) 类子弹(GameSprite): def __init__(自我): 超级(子弹,自我). __init__ ('。/feiji/子弹。png ', 2) def(自我更新): 超级(子弹,自我).update () 如果self.rect。y & lt;=0: self.kill ()python实现飞机大战