python及pygame雷霆战机游戏项目实战12 血条恢复

项目详细介绍

项目详细介绍

在这个系列中,将制作一个雷霆战机游戏。

GIF.gif

让玩家变得更强,增加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
image.png

处理盾牌加电,这会给玩家一个随机数量的盾牌。在'gun'上电是一个稍微多一点参与。

项目源码及资源

获取地址

你可能感兴趣的:(python及pygame雷霆战机游戏项目实战12 血条恢复)