之前我们有了可以发射子弹的飞机,但缺少敌机,现在我们开始为自己添加敌人,首先创建一个敌机类:
class Enemy():
def restart(self):
self.x = random.randint(50, 400)
self.y = random.randint(-200, -50)
self.speed = random.random() + 0.1
def __init__(self):
self.restart()
self.image = pygame.image.load('enemy.png').convert_alpha()
def move(self):
if self.y < 800:
self.y += self.speed
else:
#重置
self.restart()
接下来在游戏主循环之前创建一个敌机列表,不用多,5架就好:
enemy = []
for i in range(5):
enemy.append(Enemy())
在主循环中加载这些图像:
for e in enemy:
e.move()
screen.blit(e.image, (e.x, e.y))
添加完后的效果应该是这样的:
按照击中目标的规则,满足子弹的坐标落在敌机图片的坐标范围内就算成功击落,那么对应得数学关系就是
e.x < b.x < e.x+e.width
e.y < b.y < e.y+e.height
所以检测击中函数就是:def checkHit(enemy, bullet):
if (bullet.x > enemy.x and bullet.x < enemy.x + enemy.image.get_width()) and (bullet.y > enemy.y and bullet.y < enemy.y + enemy.image.get_height()):
enemy.restart()
bullet.active = False
在主循环中对每颗子弹和每架敌机进行是否击中的判断:
for b in bullets:
if b.active:
for e in enemies:
checkHit(e, b)
到现在这个游戏已经有了最简单的功能,击中后目标敌机消失,下一篇还需要做游戏结束和分数统计的功能。