예제 #1
0
class RunnerLayer(cocos.layer.ColorLayer, Layer):
    """State"""

    is_event_handler = True

    def __init__(self, game, interface, meta):
        super().__init__(242, 242, 242, 255)

        background_sprite = Sprite('fondo_final.svg', anchor=(0, 0))
        background_sprite.position = (0, 0)
        background_sprite.scale = 0.1
        self.add(background_sprite, z=0)

        self.game = game
        self.toaster = None
        self.meta = meta

        self.meta["current_world"] = 0
        self.current_screen = 0
        self.space_used = 1
        self.interface = interface
        self.main_character = CollidableSprite('ppepotato.svg', anchor=(0, 0))
        self.collision_manager = CollisionManagerBruteForce()
        self.collision_manager.add(self.main_character)
        self.add(self.main_character)
        self.sprites_by_id = {}
        self.explosions = []

        self.do_draw()

        self.schedule_interval(self.check_collisions, 0.1)
        self.schedule_interval(self.check_finished, 0.1)

    def do_draw(self):
        """Draw a screen."""
        self.main_character.x = 0
        self.main_character.y = 0
        self.main_character.do(
            MoveTo((self.interface.width, self.main_character.y), 10))

        for character in self.characters:
            with suppress(Exception):
                self.remove(character.sprite)

        for explosion in self.explosions:
            with suppress(Exception):
                self.remove(explosion)

        self.explosions = []
        self.collision_manager.clear()
        if self.toaster:
            self.remove(self.toaster)
        self.toaster = CollidableSprite("toaster00.svg")
        self.toaster.scale = 0.1
        self.toaster.position = (2 * random.randint(0, self.width) / 3 +
                                 self.width / 3), (random.randint(
                                     0, round(2 * self.height / 3)))
        self.add(self.toaster)
        self.collision_manager.add(self.toaster)

        self.current_screen += 1
        for character in self.characters:
            self.sprites_by_id[id(character.sprite)] = character
            self.collision_manager.add(character.sprite)
            self.add(character.sprite)

        self.draw()

    def check_finished(self, *args, **kwargs):
        """Check if has finished."""
        if self.main_character.x > self.interface.width:
            self.do_draw()

    def check_collisions(self, *args, **kwargs):
        """Check for collisions."""
        for elem in self.collision_manager.iter_colliding(self.main_character):
            if elem == self.toaster:
                position = self.toaster.position
                self.remove(self.toaster)
                self.toaster = CollidableSprite("toaster01.svg")
                self.toaster.scale = 0.1
                self.toaster.position = position
                self.add(self.toaster)
                director.replace(
                    FadeTRTransition(self.meta['scenes']['toaster']))
                continue
            if not id(elem) in self.sprites_by_id:
                continue
            self.sprites_by_id[id(elem)].touched = True
            explosion = Sprite('explosion.svg')
            explosion.scale = 0.5
            explosion.position = elem.position
            self.explosions.append(explosion)

            with suppress(Exception):
                self.remove(elem)
            self.add(explosion)

    def on_key_press(self, key, _):
        """Jumps."""
        if key == pyglet.window.key.SPACE:
            self.main_character.do(
                JumpTo((self.main_character.x + 50, 10), 100, 1, 0.8))

    @property
    def world(self):
        """Get current world."""
        return self.game.state[self.meta["current_world"]]

    @property
    def characters(self):
        """Get current drawable characters"""
        return self.interface.screens[self.current_screen].characters
예제 #2
0
class MiCapa(Layer):
    is_event_handler = True

    def on_key_press(self, k, _):
        Personaje.pulsar_tecla[k] = 1

    def on_key_release(self, k, _):
        Personaje.pulsar_tecla[k] = 0

    def __init__(self, HUD):
        super().__init__()
        self.ancho_ventana, self.alto_ventana = director.get_window_size()
        self.man_col = CollisionManagerBruteForce()
        self.HUD = HUD
        self.lanzar_personaje()
        self.enemigo()
        self.schedule(self.update)
        # Cargamos el fondo
        self.fondo = Sprite(load('Fondo3.png'), (400, 325))
        self.add(self.fondo, z=0)

#Posicionamos al personaje en la pantalla

    def lanzar_personaje(self):
        self.personaje = Personaje('Personaje.png', self.ancho_ventana * 0.5,
                                   50)
        self.add(self.personaje, z=1)

#Posicionamos los enemigos en pantalla

    def enemigo(self):
        for i in range(2):
            self.enemigo = Enemigo("Enemigo.png", self.ancho_ventana * 0.5,
                                   560 - i * 40)
            self.add(self.enemigo, z=1)

#Llamamos a todos los métodos update()

    def update(self, dt):
        self.man_col.clear()
        for _, node in self.children:
            if isinstance(node, Actor):
                node.update(dt)
        for _, node in self.children:
            if isinstance(node, Actor):
                self.man_col.add(node)

        self.collide(self.personaje)


#Definimos el método de colisiones

    def collide(self, node):
        if node is not None:
            for other in self.man_col.iter_colliding(node):
                if self.children.count((1, other)) != 0:
                    other.kill()
                    if isinstance(other, Enemigo):
                        self.HUD.puntos += 10
                        self.HUD.update()
                if self.children.count((1, node)) != 0:
                    node.kill()
                seq = ImageGrid(load('Explosion.png'), 1, 1)
                anim = Animation.from_image_sequence(seq, 0.05, False)
                self.sprite = Sprite(anim, (other.x, other.y))
                self.add(self.sprite)
                self.do(Delay(0.8) + CallFunc(self.sprite.kill))