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