1 #coding=utf-8 2 import pygame 3 import random 4 #导入pygame模块 5 from pygame.locals import * 6 #导入检测键盘的子模块 7 import time 8 class PublicAircraft(): 9 def __init__(self,screen,planeName): 10 self.planeName = planeName 11 self.screen = screen 12 self.imageFile = pygame.image.load(self.imagePath).convert() 13 self.bulletList = [] 14 def display(self): 15 self.screen.blit(self.imageFile,(self.x,self.y)) 16 for bullet in self.bulletList: 17 bullet.display() 18 bullet.move() 19 needDelBullet = [] 20 for i in self.bulletList: 21 if i.judge(): 22 needDelBullet.append(i) 23 for i in needDelBullet: 24 self.bulletList.remove(i) 25 def shoot(self): 26 newBullet = PublicBullet(self.x,self.y,self.screen,self.planeName) 27 self.bulletList.append(newBullet) 28 class HeroAircraft(PublicAircraft): 29 def __init__(self,screen,planeName): 30 self.x = 250 31 self.y = 600 32 self.imagePath = "./feiji/hero.gif" 33 super().__init__(screen,planeName) 34 def moveLeft(self): 35 self.x -= 20 36 def moveRight(self): 37 self.x += 20 38 def moveUp(self): 39 self.y -= 20 40 def moveDown(self): 41 self.y += 20 42 class EnemyAircraft(PublicAircraft): 43 def __init__(self,screen,planeName): 44 self.x = 0 45 self.y = 0 46 self.imagePath = "./feiji/enemy-1.gif" 47 super().__init__(screen,planeName) 48 self.direction = "right" 49 def move(self): 50 if self.direction == "right": 51 self.x += 2 52 elif self.direction == "left": 53 self.x -= 2 54 if self.x > 480-50: 55 self.direction = "left" 56 elif self.x < 0: 57 self.direction = "right" 58 def shoot(self): 59 num = random.randint(1,5) 60 if num == 5: 61 super().shoot() 62 print("敌人射子弹") 63 class PublicBullet(object): 64 def __init__(self,x,y,screen,planeName): 65 self.screen = screen 66 self.planeName = planeName 67 #定义默认值,接收从飞机类中传过来的参数 68 if planeName == "aircraft": 69 self.x = x+40 70 self.y = y-20 71 imagePath = "./feiji/bullet-3.gif" 72 elif planeName == "enemy": 73 self.x = x+30 74 self.y = y+30 75 imagePath = "./feiji/bullet-1.gif" 76 self.bulletImageFile = pygame.image.load(imagePath).convert() 77 def move(self): 78 if self.planeName == "aircraft": 79 self.y -= 2 80 if self.planeName == "enemy": 81 self.y += 2 82 def display(self): 83 self.screen.blit(self.bulletImageFile,(self.x,self.y)) 84 def judge(self): 85 if self.y<0 or self.y>890: 86 return True 87 else: 88 return False 89 90 if __name__ == '__main__': 91 #__name__变量,判断该模块是作为脚本被执行,还是被调用,当直接执行的时候,就是main,在被别人调用的时候,就是name 92 screen = pygame.display.set_mode((480,980),0,32) 93 #设置屏幕,0,32是默认值 94 bgImageFile = './feiji/background.png' 95 #导入图片 96 background = pygame.image.load(bgImageFile).convert() 97 #背景用background保存 98 aircraft = HeroAircraft(screen,"aircraft") 99 enemy = EnemyAircraft(screen,"enemy") 100 #aircraftImageFile = './feiji/hero.gif' 101 #导入飞机图片 102 #aircraft = pygame.image.load(aircraftImageFile).convert() 103 #飞机图用aircraft保存 104 105 while True: 106 screen.blit(background,(0,0)) 107 #设置背景在屏幕的坐标,0.0是左上角的坐标。 108 #screen.blit(aircraft,(x,y)) 109 #设置飞机在屏幕的坐标 110 aircraft.display() 111 enemy.move() 112 enemy.shoot() 113 enemy.display() 114 115 for event in pygame.event.get(): 116 #在发生的事件当中循环,意思可以等同于获取所有的键盘操作 117 if event.type == QUIT: 118 #判断是否是按下了关闭键 119 print("exit") 120 exit() 121 #退出程序 122 elif event.type ==KEYDOWN: 123 #判断是否按下了按键 124 if event.key == K_a or event.key == K_LEFT: 125 #判断是否按下了a键或者左键 126 print('左') 127 aircraft.moveLeft() 128 elif event.key == K_d or event.key == K_RIGHT: 129 #判断是否按下了d键或者右键 130 print('右') 131 aircraft.moveRight() 132 elif event.key == K_w or event.key == K_UP: 133 #判断是否按下了w键或者上键 134 print('上') 135 aircraft.moveUp() 136 elif event.key == K_s or event.key == K_DOWN: 137 #判断是否按下了s键或者下键 138 print('下') 139 aircraft.moveDown() 140 elif event.key == K_SPACE: 141 #判断是否按下了空格键 142 print('射子弹') 143 aircraft.shoot() 144 time.sleep(0.01) 145 pygame.display.update() 146 #更新屏幕