-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlaneWar.py
153 lines (113 loc) · 3.9 KB
/
PlaneWar.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# -*- coding:utf-8 -*-
import pygame
from pygame.locals import *
import time
import random
class Base(object):
def __init__(self, screen_temp, x, y, image_name):
self.x = x
self.y = y
self.screen = screen_temp
self.image = pygame.image.load(image_name)
class BasePlane(Base):
def __init__(self, screen_temp, x, y, image_name):
Base.__init__(self, screen_temp, x, y, image_name)
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()
if bullet.judge(): # 判断子弹是否越界
self.bullet_list.remove(bullet)
class HeroPlane(BasePlane):
def __init__(self, screen_temp):
BasePlane.__init__(self, screen_temp, 210, 700, "./feiji/hero1.png") # super().__init__()
def move_left(self):
self.x -= 20
def move_right(self):
self.x += 20
def fire(self):
self.bullet_list.append(Bullet(self.screen, self.x, self.y))
class EnemyPlane(BasePlane):
"""敌机的类"""
def __init__(self, screen_temp):
BasePlane.__init__(self, screen_temp, 0, 0, "./feiji/enemy0.png")
self.direction = "right" # 用来存储飞机默认的显示方向
def move(self):
if self.direction == "right":
self.x += 5
elif self.direction == "left":
self.x -= 5
if self.x > 480 - 50:
self.direction = "left"
elif self.x < 0:
self.direction = "right"
def fire(self):
random_num = random.randint(1, 100)
if random_num == 8 or random_num == 20:
self.bullet_list.append(EnemyBullet(self.screen, self.x, self.y))
class BaseBullet(Base):
def display(self):
self.screen.blit(self.image, (self.x, self.y))
class Bullet(BaseBullet):
def __init__(self, screen_temp, x, y):
BaseBullet.__init__(self, screen_temp, x + 40, y - 20, "./feiji/bullet.png")
def move(self):
self.y -= 20
def judge(self):
if self.y < 0:
return True
else:
return False
class EnemyBullet(BaseBullet):
def __init__(self, screen_temp, x, y):
BaseBullet.__init__(self, screen_temp, x + 25, y + 40, "./feiji/bullet1.png")
def move(self):
self.y += 5
def judge(self):
if self.y > 852:
return True
else:
return False
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():
# 1. 创建窗口
screen = pygame.display.set_mode((480, 852), 0, 32)
# 2. 创建一个背景图片
background = pygame.image.load("./feiji/background.png")
# 3. 创建一个飞机对象
hero = HeroPlane(screen)
# 4. 创建一个敌机
enemy = EnemyPlane(screen)
while True:
screen.blit(background, (0, 0))
hero.display()
enemy.display()
enemy.move() # 调用敌机的移动方法
enemy.fire() # 敌机开火
pygame.display.update()
key_control(hero)
time.sleep(0.01)
if __name__ == "__main__":
main()