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