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
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
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
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