def initialize(self, height, width, treasure_number, traps, start_pos):
        """
        Initializes DungeonMap

        param: height (int) height of the map
        param: width (int) width of the map
        param: treasure_number (int) number of treasures on map
        param: traps (iterateble) traps to put on map
        param: start_pos (Position) player starting position on map
        """
        try:
            is_input_valid = width * height > treasure_number + len(traps)
        except TypeError as error:
            raise DungeonMapInitializationError(
                "Incorrect parameter type in "
                "DungeonMap initialize. \n {}".fromat(str(error)))
        else:
            if not is_input_valid:
                try:
                    raise DungeonMapInitializationError(
                        "Incorrect parameters in "
                        "DungeonMap initialize. Map can't fit all of the cells."
                    )
                #made because try daoesn't work without exept
                except DungeonMapInitializationError:
                    raise

        self.width = width
        self.height = height

        self.cells = [[empty_cell.legend for i in range(height)]
                      for j in range(width)]

        logger.debug("empty map generated")

        try:
            self.cells[start_pos.x][start_pos.y] = entrance_cell.legend
        except IndexError:
            raise DungeonMapInitializationError(
                "Incorrect parameters in "
                "DungeonMap initialize. Strating position is out of DungeonMap "
                "boundaries")

        while treasure_number > 0:
            pos = Position.generate_random_position(width, height)

            if self.cell(pos) == empty_cell.legend:
                self.cells[pos.x][pos.y] = treasure_cell.legend
                treasure_number -= 1

        logger.debug("treasures generated")

        while traps:
            pos = Position.generate_random_position(width, height)

            if self.cell(pos) == empty_cell.legend:
                self.cells[pos.x][pos.y] = traps.pop()

        logger.debug("traps generated")
    def respawn_enemy(self):
        """
        Respawns enemy at random not occupied by Player cell.
        """

        DungeonMap.enemy = choice(enemies_list)

        enemy_position = Position.generate_random_position(DungeonGame.dmap.width,\
        DungeonGame.dmap.height)

        while enemy_position == DungeonGame.player.position:
            enemy_position = Position.generate_random_position(DungeonGame.dmap.width,\
            DungeonGame.dmap.height)

        DungeonMap.enemy.position = enemy_position

        logger.debug("enemy spawned at {},{}".format(DungeonGame.enemy.position.x,\
        DungeonGame.enemy.position.y))
    def initialize(self, height, width, treasure_number, traps, start_pos):
        """
        Initializes DungeonMap

        param: height (int) height of the map
        param: width (int) width of the map
        param: treasure_number (int) number of treasures on map
        param: traps (iterateble) traps to put on map
        param: start_pos (Position) player starting position on map
        """
        if width * height < treasure_number + len(traps) + 1:
            logger.debug("Incorrect parameters in DungeonMap initialize."
            " Map can't fit all of the cells")
            return

        self.width = width
        self.height = height

        self.cells = [[empty_cell.legend for i in range(height)]
         for j in range(width)]

        logger.debug("empty map generated")

        self.cells[start_pos.x][start_pos.y] = entrance_cell.legend

        while treasure_number > 0:
            pos = Position.generate_random_position(width, height)

            if self.cell(pos) == empty_cell.legend:
                self.cells[pos.x][pos.y] = treasure_cell.legend
                treasure_number -= 1

        logger.debug("treasures generated")

        while traps:
            pos = Position.generate_random_position(width, height)

            if self.cell(pos) == empty_cell.legend:
                self.cells[pos.x][pos.y] = traps.pop()

        logger.debug("traps generated")
    def init_new_game(self):
        """
        Initializes new games
        """
        logger.info(text.new_game_start)
        input()
        logger.info(text.administration)
        input()
        logger.info(text.enter_proficiency_prompt)
        user_input = input().lower()

        if user_input in DungeonGame.player.proficiencies:
            DungeonGame.player.proficiency = user_input
        else:
            DungeonGame.player.proficiency = "none"

        logger.info(text.enter_dungeon_width_prompt)
        width = input_number_from_boundaries(DungeonGame.MIN_MAP_WIDTH,\
         DungeonGame.MAX_MAP_WIDTH)

        logger.info(text.enter_dungeon_height_prompt)
        height = input_number_from_boundaries(DungeonGame.MIN_MAP_HEIGHT,\
         DungeonGame.MAX_MAP_HEIGHT)

        size = width * height

        number_of_treasures = max (size * DungeonGame.treasure_rarity,\
         DungeonGame.treasure_to_win)
        number_of_traps = min (size - number_of_treasures - 1, size * DungeonGame.trap_rarity)

        traps = Trap.generate_traps(number_of_traps)

        starting_position = Position.generate_random_position(width, height)

        DungeonGame.dmap.initialize(height, width, number_of_treasures, traps, starting_position)

        DungeonGame.player.health = DungeonGame.default_health
        DungeonGame.player.bag = 0
        DungeonGame.player.position = starting_position
        DungeonGame.player.discovered_map.initialize_discovered_map(height, width,\
         starting_position)

        self.respawn_enemy()