项目详细介绍
在这个系列中,将制作一个雷霆战机游戏。
让玩家变得更强,增加2种道具:
- 盾牌 - 一种能够恢复血条的物体
- 枪 - 一个会增加火力的物体
Pow精灵
首先,需要定义另一个Sprite,这次代表powerup(力量加强)对象。为了简单起见,可以复制Bullet()
的类型定义,然后进行一些更改,因为它们行为类似:对于它的图片形象,将随机选择'gun'
和之间'shield'
,这将是两种力量加强。
class Pow(pygame.sprite.Sprite): def __init__(self, center): pygame.sprite.Sprite.__init__(self) self.type = random.choice(['shield', 'gun']) self.image = powerup_images[self.type] self.image.set_colorkey(BLACK) self.rect = self.image.get_rect() self.rect.center = center self.speedy = 2 def update(self): self.rect.y += self.speedy # kill if it moves off the bottom of the screen if self.rect.top > HEIGHT: self.kill()
需要在资源加载部分加载新图像,使用字典来保存图像:
powerup_images = {} powerup_images['shield'] = pygame.image.load(path.join(img_dir, 'shield_gold.png')).convert() powerup_images['gun'] = pygame.image.load(path.join(img_dir, 'bolt_gold.png')).convert()
生产道具
为了产生它们,需要一个组来保存它们(用于碰撞):
powerups = pygame.sprite.Group()
然后,当子弹摧毁一个怪物时,想要一个(小)随机的机会,生成一个力量加强对象:
# check to see if a bullet hit a mob hits = pygame.sprite.groupcollide(mobs, bullets, True, True) for hit in hits: score += 50 - hit.radius random.choice(expl_sounds).play() expl = Explosion(hit.rect.center, 'lg') all_sprites.add(expl) if random.random() > 0.9: pow = Pow(hit.rect.center) all_sprites.add(pow) powerups.add(pow) newmob()
在这里,random.random()
选择一个介于0和1之间的随机十进制数,因此只有当数字大于0.9时才产生,这意味着有10%的几率从被毁坏的流星上掉下奖励。
与玩家碰撞
现在,需要另一次碰撞检查,这次是在玩家和道具组之间。
# check to see if player hit a powerup hits = pygame.sprite.spritecollide(player, powerups, True) for hit in hits: if hit.type == 'shield': player.shield += random.randrange(10, 30) if player.shield >= 100: player.shield = 100 if hit.type == 'gun': pass
处理盾牌加电,这会给玩家一个随机数量的盾牌。在'gun'
上电是一个稍微多一点参与。