# -*- coding:utf-8 -*- import pygame import time from pygame.locals import * import random # 玩家飞机 class HeroPlane(object): def __init__(self,screen_temp): self.x=200 self.y=440 self.image=pygame.image.load("./feiji/hero_live.png") self.screen=screen_temp self.bullet_list=[] def display(self): self.screen.blit(self.image, (self.x, self.y)) for bullet in self.bullet_list: bullet.display() bullet.move_up() if bullet.judget():#判断子弹是否越界 self.bullet_list.remove(bullet) def move_left(self): self.x-=5 def move_right(self): self.x+=5 def fire(self): self.bullet_list.append(Bullet(self.screen, self.x+50, self.y-50)) def bong(self,enemy,hero): enemy.enemybullethit(self.x,enemy,hero) def changeimg(self,enemyplan_temp): self.image = pygame.image.load("./feiji/hero.png") self.screen.blit(self.image, (self.x, self.y)) enemyplan_temp.stop() # 敌人飞机 class EnemyPlane(object): def __init__(self,screen_temp): self.x=0 self.y=0 self.image=pygame.image.load("./feiji/enermy.png") self.screen=screen_temp self.bullet_list = [] self.direction = "right" def display(self): self.screen.blit(self.image, (self.x, self.y)) for bullet in self.bullet_list: bullet.display() bullet.move_down() if bullet.judget():#判断子弹是否越界 self.bullet_list.remove(bullet) def move(self): """方向决定表达式 边界值更改方向值""" if self.direction == "right": self.x += 2 elif self.direction == "left": self.x -= 2 if self.x>410: self.direction = "left" elif self.x<0: self.direction = "right" def autofire(self): random_num=random.randint(1,100) if random_num==20 or random_num==80: self.bullet_list.append(EnemyBullet(self.screen, self.x, self.y)) def enemybullethit(self, heroplan_x_temp,enemyplan_temp,heroplan_temp): for bullet in self.bullet_list: bullet.hit(heroplan_x_temp,enemyplan_temp,heroplan_temp) def stop(self): self.direction = None# 敌机停止 class Bullet(object): def __init__(self,screen_temp, x, y): self.x = x self.y = y self.image = pygame.image.load("./feiji/zidan.png") self.screen = screen_temp def display(self): self.screen.blit(self.image, (self.x, self.y)) def move_up(self): self.y -= 10 def judget(self): if self.y<0: return True else: return False class EnemyBullet(Bullet): def __init__(self,screen_temp, x, y): self.x = x+50 self.y = y+100 self.image = pygame.image.load("./feiji/zidan2.png") self.screen = screen_temp def display(self): self.screen.blit(self.image, (self.x, self.y)) def move_down(self): self.y += 10 def judget(self): if self.y>600: return True else: return False def hit(self,heroplan_x_temp,enemyplan_temp,heroplan_temp): if self.y >=440 and self.y<=600: # 获取玩家的飞机的x值进行判断 # x1=玩家飞机.x x2=x1+142 x1 = heroplan_x_temp x2 = x1 + 142 if self.x >=x1 and self.x <=x2: print("击中!!!!!") # 玩家飞机换图 game over heroplan_temp.changeimg(enemyplan_temp) def key_control(hero_temp): # 获取事件,比如按键等 for event in pygame.event.get(): # 判断是否点击了退出按钮 if event.type == QUIT: # 点击窗口的退出键 print("exit") exit() # 判断是否按下了键 elif event.type == KEYDOWN: # 检测是否 a 或者 left if event.key == K_a or event.key == K_LEFT: print("left") hero_temp.move_left() # 检测是否 d 或者 right elif event.key == K_d or event.key == K_RIGHT: print("right") hero_temp.move_right() # 空格键 elif event.key == K_SPACE: print("space") hero_temp.fire() def main(): # 创建一个窗口 screen = pygame.display.set_mode((480,600),0,32) # 创建一个背景图片 background = pygame.image.load("./feiji/bg.png") #创建一个飞机对象 hero = HeroPlane(screen) #创建敌人飞机 enemy = EnemyPlane(screen) while True: screen.blit(background,(0,0)) hero.display() enemy.display() enemy.move()#调用敌机的移动 enemy.autofire() # 调用敌机的发射子弹 hero.bong(enemy,hero) #玩家飞机爆炸 pygame.display.update() key_control(hero) time.sleep(0.01) if __name__ == '__main__': main()