示例#1
0
文件: game.py 项目: Bobbyshow/Avoid
    def init_entities_after(self, surface):
        # Score start
        self.score = 0

        # Group player
        self.grp = Group()
        player = Hero((320, 240, 15, 15))

        self.grp.add(player)
        self.grp.update()
        self.grp.draw(surface)

        # Group barrier
        barrier = [
            Barrier((259, 160, 121, 20)),
            Barrier((259, 300, 121, 20)),
            Barrier((240, 180, 20, 121)),
            Barrier((380, 180, 20, 121)),
        ]
        barrier[0].direction_set(UP)
        barrier[1].direction_set(UP)
        barrier[2].direction_set(LEFT)
        barrier[3].direction_set(LEFT)
        grp_barrier = Group()
        grp_barrier.add(barrier)
        grp_barrier.update()
        grp_barrier.draw(surface)
        self.grp_barrier = grp_barrier

        # Missile Generator
        self.miss_gen = MissileGenerator()
        self.grp_missile = Group()

        # Time of game
        self.time = time
示例#2
0
文件: game.py 项目: Bobbyshow/Avoid
class GameScreen(BaseScreen):
    """ Screen inherit from BaseScreen.
    
    Game's screen.
    """

    __hitbox_test = True

    def init_entities_after(self, surface):
        # Score start
        self.score = 0

        # Group player
        self.grp = Group()
        player = Hero((320, 240, 15, 15))

        self.grp.add(player)
        self.grp.update()
        self.grp.draw(surface)

        # Group barrier
        barrier = [
            Barrier((259, 160, 121, 20)),
            Barrier((259, 300, 121, 20)),
            Barrier((240, 180, 20, 121)),
            Barrier((380, 180, 20, 121)),
        ]
        barrier[0].direction_set(UP)
        barrier[1].direction_set(UP)
        barrier[2].direction_set(LEFT)
        barrier[3].direction_set(LEFT)
        grp_barrier = Group()
        grp_barrier.add(barrier)
        grp_barrier.update()
        grp_barrier.draw(surface)
        self.grp_barrier = grp_barrier

        # Missile Generator
        self.miss_gen = MissileGenerator()
        self.grp_missile = Group()

        # Time of game
        self.time = time

    def execute(self, surface):
        # Destroy old missile
        self.destroy_missile()
        # Check collapse
        self.check_collapse()
        # Check missile's group
        missile = self.miss_gen.check_generation()
        if missile is not None:
            self.grp_missile.add(missile)
        self.grp_missile.update()
        # Check barrier's move
        self.grp_barrier.update()
        # Check player's move
        if pygame.key.get_pressed()[LEFT] == 1:
            movement_direction = LEFT
            self.grp.update(LEFT)
        elif pygame.key.get_pressed()[RIGHT] == 1:
            movement_direction = RIGHT
            self.grp.update(RIGHT)
        elif pygame.key.get_pressed()[UP] == 1:
            movement_direction = UP
            self.grp.update(UP)
        elif pygame.key.get_pressed()[DOWN] == 1:
            movement_direction = DOWN
            self.grp.update(DOWN)
        else:
            self.grp.update()

    def draw(self, surface):
        # Testing hitbox part
        if self.__hitbox_test:
            for sprite in self.grp.sprites():
                surface.fill(pygame.Color(0, 255, 0), sprite.get_rect(2))
            for sprite in self.grp_barrier.sprites():
                surface.fill(pygame.Color(0, 0, 255), sprite.get_rect(2))
            for sprite in self.grp_missile.sprites():
                surface.fill(pygame.Color(255, 0, 0), sprite.get_rect(2))

        return self.grp.draw(surface) + self.grp_barrier.draw(surface) + self.grp_missile.draw(surface)

    def check_collapse(self):
        for sprite in self.grp.sprites() + self.grp_missile.sprites() + self.grp_barrier.sprites():

            sprite.setup_collapse()
        # Check collapse with player and missile
        player = self.grp.sprites()[0]
        collapse_sprite = pygame.sprite.spritecollide(player, self.grp_missile, True)
        for sprite in collapse_sprite:
            del sprite
            player.lose_life()

        # Check collapse :: barrier vs player
        collapse_sprite = pygame.sprite.spritecollide(player, self.grp_barrier, False)
        for sprite in collapse_sprite:
            player.lose_life()

        if not player.is_alive():
            player.kill()
            del player
            raise ChangeScreenException(0, "You lose. Score : %s" % self.score)

    def destroy_missile(self):
        for sprite in self.grp_missile.sprites():
            if sprite.direction_get() == UP:
                if sprite.get_rect(2).top < self.miss_gen.north:
                    sprite.kill()
                    del sprite
                    self.score = self.score + 1
            elif sprite.direction_get() == DOWN:
                if sprite.get_rect(2).top > self.miss_gen.south:
                    sprite.kill()
                    del sprite
                    self.score = self.score + 1
            elif sprite.direction_get() == LEFT:
                if sprite.get_rect(2).left < self.miss_gen.ouest:
                    sprite.kill()
                    del sprite
                    self.score = self.score + 1
            elif sprite.direction_get() == DOWN:
                if sprite.get_rect(2).left > self.miss_gen.east:
                    sprite.kill()
                    del sprite
                    self.score = self.score + 1