class Defensor(object):
    url_imagen = None
    imagen = None
    cuadro_alpha = 0
    cantidad = (1, 1)
    def __new__(cls, *args, **kargs):
        if not cls.imagen: cls.imagen = engine.cargar_imagen(cls.url_imagen, True)
        return object.__new__(cls, *args, **kargs)
    def __init__(self, i, j):
        self.i = i
        self.j = j
        self.grilla = Grilla(self.url_imagen, self.cantidad[0], self.cantidad[1])
        self.rect = engine.pygame.Rect(0, 0, self.grilla.ancho, self.grilla.alto)
        self.rect.right = 50 + engine.obtener_director().escena_actual.ancho_cuadro * (j + 1)
        self.rect.bottom = 120 + engine.obtener_director().escena_actual.alto_cuadro * (i + 1)
        self.intervalo_animacion = 0.15
        self.crono_i_a = engine.pygame.time.get_ticks()
        self.salud = 100
        self.actual = 0
        self.habilidades = []
    @property
    def cuadro_actual(self):
        return self.grilla.obtener_cuadro(self.cuadros[self.actual])
    def aprender_habilidad(self, classname, *args):
        habilidades_actuales = [habilidad.__class__ for habilidad in self.habilidades]
        if classname not in habilidades_actuales:
            self.habilidades.append(classname(self, args))
    def olvidar_habilidad(self, classname):
        for h in self.habilidades:
            if h.__class__ == classname:
                self.habilidades.remove(h)
                break
    def dibujar(self, superficie):
        superficie.blit(self.imagen, self.rect, self.cuadro_actual)
    def actualizar(self, tiempo):
        if self.salud <= 0:
            if engine.obtener_director().escena_actual.tablero[self.i][self.j].__class__ == Nenufar and engine.obtener_director().escena_actual.tablero[self.i][self.j].contenido:
                engine.obtener_director().escena_actual.tablero[self.i][self.j].contenido = None
            else:
                engine.obtener_director().escena_actual.tablero[self.i][self.j] = 0
        if engine.pygame.time.get_ticks() - self.crono_i_a > self.intervalo_animacion * 1000:
            self.crono_i_a = engine.pygame.time.get_ticks()
            self.actual += 1
            if self.actual > len(self.cuadros) - 1:
                self.actual = 0
        self.actualizar_habilidades(tiempo)
    def actualizar_habilidades(self, tiempo):
        for h in self.habilidades:
            h.actualizar(tiempo)
    def sincronizar_cronos_pausa(self, t):
        nroh = 0
        for h in self.habilidades:
            for i in h.__dict__:
                if re.match("\Acrono_i_.*", i):
                    exec("self.habilidades[nroh].{}=self.habilidades[nroh].{}+t".format(i, i))
            nroh += 1
class Atacante(object):
    url_imagen_1 = None
    url_imagen_2 = None
    imagen1 = None
    imagen2 = None
    cantidad = (1, 1)
    def __new__(cls, *args, **kargs):
        if not cls.imagen1:
            cls.imagen1 = engine.cargar_imagen(cls.url_imagen_1, True)
            cls.imagen2 = engine.cargar_imagen(cls.url_imagen_2, True)
        return object.__new__(cls, *args, **kargs)
    def __init__(self, i, w, h):
        self.w = w
        self.h = h
        self.i = i
        self.j = 10
        self.grilla = Grilla(self.url_imagen_1, self.cantidad[0], self.cantidad[1])
        self.rect_real = engine.pygame.Rect(0, 0, self.grilla.ancho, self.grilla.alto)
        self.rect_real.centerx = self.w * (self.j + 1)
        self.rect_real.bottom = 120 + self.h * (i + 1)
        self.rect = engine.pygame.Rect(0, 0, 15, self.grilla.alto)
        self.intervalo_movimiento = 0.8
        self.intervalo_animacion = 0.1
        self.crono_i_m = 0
        self.crono_i_a = 0
        self.salud = 100
        self.danio = 30
        self.detenido = False
        self.congelado = False
        self.duracion_congelado = 2
        self.crono_i_c = 0
        self.imagen = self.imagen1
    @property
    def cuadro_actual(self):
        return self.grilla.obtener_cuadro(self.cuadros[self.actual])
    def dibujar(self, superficie):
        superficie.blit(self.imagen, self.rect_real, self.cuadro_actual)
    def actualizar(self, tiempo):
        if self.congelado and engine.pygame.time.get_ticks() - self.crono_i_c > self.duracion_congelado * 1000:
            self.descongelar()
    def congelar(self):
        self.crono_i_c = engine.pygame.time.get_ticks()
        if not self.congelado:
            for i in self.__dict__:
                self.congelado = True
                if re.match("\Aintervalo_.*", i):
                    exec("self.{}=self.{}*4".format(i, i))
            self.imagen = self.imagen2
    def descongelar(self):
        if self.congelado:
            self.congelado = False
            self.imagen = self.imagen1
            for i in self.__dict__:
                if re.match("\Aintervalo_.*", i):
                    exec("self.{}=self.{}/4.0".format(i, i))
Example #3
0
class Disparo(object):
    imagen = None
    sombra = None
    url_imagen = None
    url_sombra = "sombra.png"
    cantidad = (1, 1)
    def __new__(cls, *args, **kwargs):
        if not cls.imagen: 
            cls.imagen = engine.cargar_imagen(cls.url_imagen, True)
            cls.sombra = engine.cargar_imagen(cls.url_sombra, True)
        return object.__new__(cls, *args, **kwargs)
    def __init__(self, x, y):
        self.grilla = Grilla(self.url_imagen, self.cantidad[0], self.cantidad[1])
        self.rect = engine.pygame.Rect(0, 0, self.grilla.ancho, self.grilla.alto)
        self.rect.x = x
        self.rect.y = y
        self.velocidad = 3
        self.crono_i_m = 0
        self.crono_i_a = 0
        self.intervalo_movimiento = 0.001
        self.intervalo_animacion = 0.1
        self.actual = 0
        self.cuadros = [0]
    @property
    def cuadro_actual(self):
        return self.grilla.obtener_cuadro(self.cuadros[self.actual])
    def dibujar(self, superficie):
        superficie.blit(self.imagen, self.rect, self.cuadro_actual)
    def dibujar_sombra(self, superficie):
        superficie.blit(self.sombra, (self.rect.right - self.sombra.get_width(), self.rect.y + 78))
    def actualizar(self, tiempo):
        if engine.pygame.time.get_ticks() - self.crono_i_m > self.intervalo_movimiento * 1000:
            self.crono_i_m = engine.pygame.time.get_ticks()
            self.mover()
        if engine.pygame.time.get_ticks() - self.crono_i_a > self.intervalo_animacion * 1000:
            self.crono_i_a = engine.pygame.time.get_ticks()
            self.actual += 1
            if self.actual > len(self.cuadros) - 1:
                self.actual = 0
        if self.rect.left >= 1200:
            engine.obtener_director().escena_actual.balas.remove(self)
        self.hacer_danio()
    def mover(self):
        pass
    def hacer_danio(self):
        atc = engine.pygame.sprite.spritecollideany(self, engine.obtener_director().escena_actual.atacantes)
        if atc:
            atc.salud -= self.danio
            engine.obtener_director().escena_actual.balas.remove(self)
Example #4
0
class Defensor(object):
    url_imagen = None
    imagen = None
    cuadro_alpha = 0
    cantidad = (1, 1)

    def __new__(cls, *args, **kargs):
        if not cls.imagen:
            cls.imagen = engine.cargar_imagen(cls.url_imagen, True)
        return object.__new__(cls, *args, **kargs)

    def __init__(self, i, j):
        self.i = i
        self.j = j
        self.grilla = Grilla(self.url_imagen, self.cantidad[0],
                             self.cantidad[1])
        self.rect = engine.pygame.Rect(0, 0, self.grilla.ancho,
                                       self.grilla.alto)
        self.rect.right = 50 + engine.obtener_director(
        ).escena_actual.ancho_cuadro * (j + 1)
        self.rect.bottom = 120 + engine.obtener_director(
        ).escena_actual.alto_cuadro * (i + 1)
        self.intervalo_animacion = 0.15
        self.crono_i_a = engine.pygame.time.get_ticks()
        self.salud = 100
        self.actual = 0
        self.habilidades = []

    @property
    def cuadro_actual(self):
        return self.grilla.obtener_cuadro(self.cuadros[self.actual])

    def aprender_habilidad(self, classname, *args):
        habilidades_actuales = [
            habilidad.__class__ for habilidad in self.habilidades
        ]
        if classname not in habilidades_actuales:
            self.habilidades.append(classname(self, args))

    def olvidar_habilidad(self, classname):
        for h in self.habilidades:
            if h.__class__ == classname:
                self.habilidades.remove(h)
                break

    def dibujar(self, superficie):
        superficie.blit(self.imagen, self.rect, self.cuadro_actual)

    def actualizar(self, tiempo):
        if self.salud <= 0:
            if engine.obtener_director().escena_actual.tablero[self.i][
                    self.j].__class__ == Nenufar and engine.obtener_director(
                    ).escena_actual.tablero[self.i][self.j].contenido:
                engine.obtener_director().escena_actual.tablero[self.i][
                    self.j].contenido = None
            else:
                engine.obtener_director().escena_actual.tablero[self.i][
                    self.j] = 0
        if engine.pygame.time.get_ticks(
        ) - self.crono_i_a > self.intervalo_animacion * 1000:
            self.crono_i_a = engine.pygame.time.get_ticks()
            self.actual += 1
            if self.actual > len(self.cuadros) - 1:
                self.actual = 0
        self.actualizar_habilidades(tiempo)

    def actualizar_habilidades(self, tiempo):
        for h in self.habilidades:
            h.actualizar(tiempo)

    def sincronizar_cronos_pausa(self, t):
        nroh = 0
        for h in self.habilidades:
            for i in h.__dict__:
                if re.match("\Acrono_i_.*", i):
                    exec(
                        "self.habilidades[nroh].{}=self.habilidades[nroh].{}+t"
                        .format(i, i))
            nroh += 1
Example #5
0
class Atacante(object):
    url_imagen_1 = None
    url_imagen_2 = None
    imagen1 = None
    imagen2 = None
    cantidad = (1, 1)

    def __new__(cls, *args, **kargs):
        if not cls.imagen1:
            cls.imagen1 = engine.cargar_imagen(cls.url_imagen_1, True)
            cls.imagen2 = engine.cargar_imagen(cls.url_imagen_2, True)
        return object.__new__(cls, *args, **kargs)

    def __init__(self, i, w, h):
        self.w = w
        self.h = h
        self.i = i
        self.j = 10
        self.grilla = Grilla(self.url_imagen_1, self.cantidad[0],
                             self.cantidad[1])
        self.rect_real = engine.pygame.Rect(0, 0, self.grilla.ancho,
                                            self.grilla.alto)
        self.rect_real.centerx = self.w * (self.j + 1)
        self.rect_real.bottom = 120 + self.h * (i + 1)
        self.rect = engine.pygame.Rect(0, 0, 15, self.grilla.alto)
        self.intervalo_movimiento = 0.8
        self.intervalo_animacion = 0.1
        self.crono_i_m = 0
        self.crono_i_a = 0
        self.salud = 100
        self.danio = 30
        self.detenido = False
        self.congelado = False
        self.duracion_congelado = 2
        self.crono_i_c = 0
        self.imagen = self.imagen1

    @property
    def cuadro_actual(self):
        return self.grilla.obtener_cuadro(self.cuadros[self.actual])

    def dibujar(self, superficie):
        superficie.blit(self.imagen, self.rect_real, self.cuadro_actual)

    def actualizar(self, tiempo):
        if self.congelado and engine.pygame.time.get_ticks(
        ) - self.crono_i_c > self.duracion_congelado * 1000:
            self.descongelar()

    def congelar(self):
        self.crono_i_c = engine.pygame.time.get_ticks()
        if not self.congelado:
            for i in self.__dict__:
                self.congelado = True
                if re.match("\Aintervalo_.*", i):
                    exec("self.{}=self.{}*4".format(i, i))
            self.imagen = self.imagen2

    def descongelar(self):
        if self.congelado:
            self.congelado = False
            self.imagen = self.imagen1
            for i in self.__dict__:
                if re.match("\Aintervalo_.*", i):
                    exec("self.{}=self.{}/4.0".format(i, i))