Esempio n. 1
0
    def crear_mapa(self, filas):
        """Crea el Mapa a partir de la definicion provista por parametro (`filas`),
        y devuelve una tupla con el mapa y el actor que representa al heroe del juego.
        `filas` es una lista de strings, que corresponde con el contenido completo
        del archivo .map.Se presupone que en el mapa se proporciona una salida para
        poder finalizar el juego, y si se proporciona algun caracter que no corresponde
        a ningun personaje, se lo reemplaza por una celda vacía automáticamente.
        Si hay mas de un heroe en la definicion del mapa, o bien si
        no hay ningun heroe, la funcion lanza una excepcion, si el mapa no tiene
        el formato correcto(debe ser rectangular), también
        """
        dic_funciones = {
            "#": Juego.agregar_pared,
            "o": Juego.agregar_orco,
            "g": Juego.agregar_goblin,
            "<": Juego.agregar_salida
        }
        ALTO = len(filas)
        ANCHO = len(filas[0])
        if ANCHO == 0: raise IndexError("Linea vacia")
        mapa = Mapa(ANCHO, ALTO)
        x = 0
        y = -1
        heroe = None
        cantidad_heroes = 0
        for fila in filas:
            if len(fila) != ANCHO:
                raise errores.MapaIncorrectoError(
                    "la linea", fila,
                    "no contiene la misma cantidad de caracteres que la primer linea del archivo"
                )
            x = 0
            y += 1
            for caracter in fila:
                if caracter == "@":
                    # Lo necesitamos ya que, debemos definir heroe para poder devolverlo
                    heroe = actores.Heroe()
                    mapa.agregar_actor(heroe, x, y)
                    cantidad_heroes += 1
                    if cantidad_heroes > 1:
                        raise errores.DemasiadosHeroesError(
                            "Se esta añadiendo", cantidad_heroes - 1,
                            "heroes de mas")
                elif caracter in dic_funciones:
                    dic_funciones[caracter](self, mapa, x, y)

                x += 1

        if heroe == None:
            raise errores.NoHayHeroeError("No hay ningun heroe(@) en el mapa")
        return mapa, heroe
Esempio n. 2
0
File: juego.py Progetto: t0mixcs/tp3
 def crear_mapa(self, filas):
     """Crea el Mapa a partir de la definicion provista por parametro (`filas`),
     y devuelve una tupla con el mapa y el actor que representa al heroe del juego.
     Si hay mas de un heroe en la definicion del mapa, o bien si no hay ningun
     heroe, la funcion lanza una excepcion.
     `filas` es una lista de strings, que corresponde con el contenido completo
     del archivo .map."""
     ####
     #### Modificar este codigo para que cargue el mapa dinamicamente
     #### a partir de `filas`
     ####
     mapa = Mapa(10, 10)
     heroe = actores.Heroe()
     mapa.agregar_actor(heroe, 5, 5)
     return mapa, heroe
Esempio n. 3
0
 def crear_mapa(self, filas):
     """Crea el Mapa a partir de la definicion provista por parametro (`filas`),
     y devuelve una tupla con el mapa y el actor que representa al heroe del juego.
     `filas` es una lista de strings, que corresponde con el contenido completo
     del archivo .map.Se presupone que en el mapa se proporciona una salida para
     poder finalizar el juego, y si se proporciona algun caracter que no corresponde
     a ningun personaje, se lo reemplaza por una celda vacía automáticamente.
     Si hay mas de un heroe en la definicion del mapa, o bien si
     no hay ningun heroe, la funcion lanza una excepcion, si el mapa no tiene
     el formato correcto(debe ser rectangular), también
     """
     dic_funciones = {"#":Juego.agregar_pared,
                      "o":Juego.agregar_orco,
                      "g":Juego.agregar_goblin,
                      "<":Juego.agregar_salida
                      }
     ALTO = len(filas)
     ANCHO = len(filas[0])
     if ANCHO == 0: raise IndexError("Linea vacia")
     mapa = Mapa(ANCHO,ALTO)
     x = 0
     y = -1
     heroe = None
     cantidad_heroes = 0
     for fila in filas:
         if len(fila) != ANCHO:
             raise errores.MapaIncorrectoError("la linea",fila,"no contiene la misma cantidad de caracteres que la primer linea del archivo")
         x = 0
         y+= 1
         for caracter in fila:
             if caracter == "@":
                 # Lo necesitamos ya que, debemos definir heroe para poder devolverlo
                 heroe = actores.Heroe()
                 mapa.agregar_actor(heroe,x,y)
                 cantidad_heroes+=1
                 if cantidad_heroes > 1:
                     raise errores.DemasiadosHeroesError("Se esta añadiendo",cantidad_heroes-1,"heroes de mas")
             elif caracter in dic_funciones:
                 dic_funciones[caracter](self,mapa,x,y)
             
         	x+=1
         
     if heroe == None:
         raise errores.NoHayHeroeError("No hay ningun heroe(@) en el mapa")
     return mapa, heroe
Esempio n. 4
0
    def crear_mapa(self, filas):
        """Crea el Mapa a partir de la definicion provista por parametro (`filas`),
        y devuelve una tupla con el mapa y el actor que representa al heroe del juego.
        Si hay mas de un heroe en la definicion del mapa, o bien si no hay ningun
        heroe, la funcion lanza una excepcion.
        `filas` es una lista de strings, que corresponde con el contenido completo
        del archivo .map."""

        #There is no hero, create the map.
        posHero = 0
        mapa = Mapa(len(filas[0]), len(filas))

        #Invert the list of str
        reverse = zip(*filas)
        for i in xrange(len(reverse)):
           reverse[i] = ''.join(reverse[i])
        filas = reverse
        del reverse

        #for each line in the list of str
        for i, line in enumerate(filas):
            #for each character in the str
            for j, char in enumerate(line):
                #si el caracter es @
                if(char == '@'):
                    #Si hay hero
                    if posHero == 0: 
                        #Nuevo hero
                        posHero = (i, j)
                    else:
                        #Sino : Error, Hay dos !
                        raise Exception("Hay 2 heroes en la mapa")

                # Agrega los actores a la map
                if(char == '#'):
                    mapa.agregar_actor(actores.Pared(), i,j)
                if(char == 'g'):
                    mapa.agregar_actor(actores.Goblin(), i,j)
                if(char == 'o'):
                    mapa.agregar_actor(actores.Orco(), i,j)
                if(char == '$'):
                    mapa.agregar_actor(actores.Moneda(100), i,j)
                if(char == '<'):
                    mapa.agregar_actor(actores.Salida(), i,j)

        # Si no hay heroe : Exception
        if posHero == 0:
            raise Exception("No hay heroe en la mapa")

        # Cree el horoe
        heroe = actores.Heroe()
        # Lo agrega a la map
        mapa.agregar_actor(heroe, posHero[0], posHero[1])
        return mapa, heroe