用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     #更新屏幕

显示效果:

原文地址:https://www.cnblogs.com/huxiaoyi/p/8988830.html