Пример #1
0
class Level1(Level):
    """
            first level become the biggest
            """
    def __init__(self, game: Properties):
        super().__init__(game)

    def level_init(self):
        self.player = Player(20, random.randint(20, game_width - 20),
                             random.randint(20, game_height - 20))
        self.player.game = self.game
        self.enemies = [
            Sphere(random.randint(2, 40), random.randint(40, game_width - 40),
                   random.randint(40, game_height - 40)) for x in range(200)
        ]  # spawn random enemies
        for enemy in self.enemies:
            enemy.speed(random.randint(-1, 1), random.randint(
                -1, 1))  # set random speed to reduce impasse

    def run_level(self):
        while self.running:
            self.game.screen.fill(
                (0, 0, 255))  # background outside level space
            self.game.screen.blit(
                pygame.transform.scale(background,
                                       (round(game_width * self.scale),
                                        round(game_height * self.scale))),
                (round(-(self.player.x * self.scale - self.player.pos()[0])),
                 round(-(self.player.y * self.scale - self.player.pos()[1]))
                 ))  # level space backgorund sync with player position

            if not self.user_interaction_handler():
                return
            if self.clicks > 0:  # very rudimentary way of knowing number of rapid clicks
                self.clicks -= 1
            if not self.paused:
                if self.player.size < 1:
                    return game_over(self.game)
                pygame.draw.circle(self.game.screen, (0, 30, 255),
                                   self.player.pos(),
                                   self.player.scaled_size())
                self.player.update()
                for enemy in self.enemies.copy():
                    pygame.draw.circle(self.game.screen, enemy.color,
                                       enemy.pos(), enemy.scaled_size())
                    if not enemy.update():
                        self.enemies.remove(enemy)
                for enemy in self.enemies + [self.player]:
                    for enemy2 in self.enemies + [self.player]:
                        if enemy2 != enemy:
                            if collision(enemy, enemy2):
                                attack(enemy, enemy2)
                pygame.draw.circle(self.game.screen, (150, 150, 150), [
                    pos + (self.player.scaled_size() * 1.5) * dir for pos, dir
                    in zip(self.player.pos(), get_trig(self.player))
                ], 5)

                if all([
                        self.player.size > enemy.size for enemy in self.enemies
                ]) and not self.won:  # check if user is the biggest
                    self.won = true
                    self.paused = true
            else:
                if self.won:
                    if not pause_menu(self.game, won=true):
                        return false
                    else:
                        self.paused = false
                else:
                    if not pause_menu(self.game):
                        return false
                    else:
                        self.paused = false

            pygame.display.update()
            self.game.clock.tick(self.game.fps)
Пример #2
0
class Level2(Level):
    """
             eat the Repulsor
             """
    def __init__(self, game: Properties):
        super().__init__(game)

    def level_init(self):
        self.player = Player(30, random.randint(30, game_width - 30),
                             random.randint(30, game_height - 30))
        self.player.game = self.game

        self.enemies = [
            Sphere(random.randint(2, 20), random.randint(20, game_width - 20),
                   random.randint(20, game_height - 20)) for x in range(100)
        ]
        self.repulsor = Repulsor(30, random.randint(30, game_width - 30),
                                 random.randint(30, game_height - 30))
        for enemy in self.enemies + [self.repulsor]:
            enemy.speed(random.randint(-1, 1) / 1, random.randint(-1, 1) / 1)

    def run_level(self):
        while self.running:
            self.game.screen.fill((0, 0, 255))
            self.game.screen.blit(
                pygame.transform.scale(background,
                                       (round(game_width * self.scale),
                                        round(game_height * self.scale))),
                (round(-(self.player.x * self.scale - self.player.pos()[0])),
                 round(-(self.player.y * self.scale - self.player.pos()[1]))))

            if not self.user_interaction_handler():
                return

            if self.clicks > 0:
                self.clicks -= 1

            if not self.paused:
                if self.player.size < 1:
                    return game_over(self.game)

                pygame.draw.circle(self.game.screen, (0, 255, 255),
                                   self.player.pos(),
                                   self.player.scaled_size())
                self.player.update()
                for enemy in self.enemies.copy() + [self.repulsor]:
                    if enemy == self.repulsor and self.repulsor.size > 1:
                        pygame.draw.circle(self.game.screen, (255, 255, 255),
                                           enemy.pos(), enemy.scaled_size())
                        enemy.update()
                    elif enemy != self.repulsor:
                        pygame.draw.circle(self.game.screen, enemy.color,
                                           enemy.pos(), enemy.scaled_size())
                        if not enemy.update():
                            self.enemies.remove(enemy)
                for enemy in self.enemies + [self.player, self.repulsor]:
                    for enemy2 in self.enemies + [self.player, self.repulsor]:
                        if enemy2 != enemy:
                            if enemy == self.repulsor and enemy.size < enemy2.size:
                                enemy.evade(
                                    get_trig_general(enemy, enemy2),
                                    distance(enemy, enemy2)
                                )  # Repulsor evades from bigger spheres
                            if collision(enemy, enemy2):
                                attack(enemy, enemy2)
                pygame.draw.circle(self.game.screen, (150, 150, 150), [
                    pos + (self.player.scaled_size() * 1.5) * dir for pos, dir
                    in zip(self.player.pos(), get_trig(self.player))
                ], 5)
                if self.player.size > self.repulsor.size and self.repulsor.size < 1 and not self.won:
                    self.won = true
                    self.paused = true
            else:
                if self.won:
                    if not pause_menu(self.game, won=true):
                        return false
                    else:
                        self.paused = false
                else:
                    if not pause_menu(self.game):
                        return false
                    else:
                        self.paused = false

            pygame.display.update()
            self.game.clock.tick(self.game.fps)