Ejemplo n.º 1
0
    def init(self):

        self.sprites = pygame.sprite.Group()
        self.mobs = pygame.sprite.Group()
        self.bullets = pygame.sprite.Group()
        self.power_ups = pygame.sprite.Group()

        for i in range(config.NB_MOBS):
            new_mob = Mob()
            new_mob.add(self.mobs, self.sprites)

        self.player = Player()
        self.sprites.add(self.player)

        self.score = 0
        self.gameover = False
Ejemplo n.º 2
0
    def update(self):

        self.background.update()
        self.sprites.update()

        # list of mobs collided with player ; mobs are deleted
        mob_hits_with_player = pygame.sprite.spritecollide(
            self.player, self.mobs, True, pygame.sprite.collide_circle)

        for mob_hit in mob_hits_with_player:
            self.sound_handler.play("player_hit")
            self.player.shield -= mob_hit.radius * 2
            expl = Explosion(self.explosion_anim, mob_hit.rect.center, 'sm')
            self.sprites.add(expl)
            new_mob = Mob()
            new_mob.add(self.mobs, self.sprites)
            if self.player.shield < 0:
                self.sound_handler.play("player_death")
                self.death_explosion = Explosion(self.explosion_anim,
                                                 self.player.rect.center,
                                                 'player')
                self.sprites.add(self.death_explosion)
                self.player.hide()
                self.player.lives -= 1
                self.player.shield = self.player.initial_shield

        # check if player died
        if self.player.lives == 0 and not self.death_explosion.alive():
            self.gameover = True
            log.info("Game Over!")
            log.info("Score: " + str(self.score))

        # list of mobs collided with the bullets ; both are deleted
        mob_hits_with_bullets = pygame.sprite.groupcollide(
            self.mobs, self.bullets, True, True)

        for mob_hit in mob_hits_with_bullets:
            self.sound_handler.play("explosion")
            points_gained = 60 - mob_hit.radius
            self.score += points_gained
            log.info("Hit Radius: " + str(mob_hit.radius))
            self.score_textes.append(
                Float_Text(str(points_gained), 60, mob_hit.rect.midtop[0],
                           mob_hit.rect.midtop[1] - 10))
            expl = Explosion(self.explosion_anim, mob_hit.rect.center, 'lg')
            self.sprites.add(expl)
            new_mob = Mob()  # respawn a new mob
            new_mob.add(self.mobs, self.sprites)
            if random.random() > self.power_up_rate:  # 90%
                power = Power_Up(mob_hit.rect.center)
                power.add(self.sprites, self.power_ups)

        # list of power_ups collided with player ; power_ups are deleted
        power_up_hits_with_player = pygame.sprite.spritecollide(
            self.player, self.power_ups, True)

        for pu_hit in power_up_hits_with_player:
            level = pu_hit.level
            if pu_hit.type == 'shield':
                self.sound_handler.play("shield")
                bonus = 1 if level == 'bronze' else 3 if level == 'silver' else 9
                bonus *= self.player.initial_shield // random.randrange(
                    12, 30)  # 20 / 40 / 60 %
                self.player.shield += bonus
                self.player.shield = self.player.initial_shield if self.player.shield > self.player.initial_shield else self.player.shield
                self.shield_bonus_textes.append(
                    Float_Text(str(bonus), 60, pu_hit.rect.midtop[0],
                               pu_hit.rect.midtop[1] - 10))
            elif pu_hit.type == 'bolt':
                self.sound_handler.play("bolt")
                self.player.shoot_bonus_counter += 3 * (
                    1 if level == 'bronze' else 2 if level == 'silver' else 4)

        # moving floating text about points got from destroying mobs
        self.score_textes = list(
            filter(lambda x: x.lifetime > 0, self.score_textes))
        for s in self.score_textes:
            s.update(2, 2)

        # moving floating text about shield bonuses
        self.shield_bonus_textes = list(
            filter(lambda x: x.lifetime > 0, self.shield_bonus_textes))
        for s in self.shield_bonus_textes:
            s.update(1, 1)