/// <summary>
 /// Lee un tipo de item por la terminal. Retorna 0 si ningún tipo
 /// fue seleccionado.
 /// </summary>
 /// <returns>El tipo de item, o 0</returns>
 private ItemType ReadItemType()
 {
     return(ConsoleListSelector <ItemType> .Select(
                Enum.GetValues(typeof(ItemType)).Cast <ItemType>().ToList(),
                "Select an item:"
                ));
 }
 /// <summary>
 /// Lee un tipo de encuentro por consola. Retorna el tipo de encuentro
 /// seleccionado, o 0 para la selección vacía.
 /// </summary>
 /// <returns>El tipo seleccionado, o 0.</returns>
 private EncounterType ReadEncounterType()
 {
     return(ConsoleListSelector <EncounterType> .Select(
                Enum.GetValues(typeof(EncounterType)).Cast <EncounterType>().ToList(),
                "Select an encounter type:"
                ));
 }
 /// <summary>
 /// Lectura por consola de un tipo de personaje.
 /// Retorna 0 si la entrada es vacía.
 /// </summary>
 /// <returns>Tipo de personaje o 0</returns>
 private CharacterType ReadCharacterType()
 {
     return(ConsoleListSelector <CharacterType> .Select(
                Enum.GetValues(typeof(CharacterType)).Cast <CharacterType>().ToList(),
                "Select a character type:"
                ));
 }
        /// <summary>
        /// Permite seleccionar un item por consola. Muestra una lista
        /// con los items disponibles.
        ///
        /// Retorna el item elegido. Si no se escoge ninguno, pregunta
        /// nuevamente hasta que uno sea seleccionado.
        /// </summary>
        /// <param name="items">Lista de items disponibles para elegir</param>
        /// <param name="message">Mensaje de prompt para mostrar</param>
        /// <returns>El item escogido</returns>
        private IItem SelectItem(List <IItem> items, string message = "Select an item:")
        {
            IItem selected = ConsoleListSelector <IItem> .Select(items, message);

            if (selected == null)
            {
                return(SelectItem(items, message));
            }
            return(selected);
        }
        /// <summary>
        /// Permite seleccionar un personaje por consola. Muestra una lista
        /// con todos los personajes disponibles.
        ///
        /// Retorna el personaje elegido. Si no se escoge ninguno, pregunta
        /// nuevamente hasta que uno sea seleccionado.
        /// </summary>
        /// <param name="message">Mensaje de prompt para mostrar</param>
        /// <returns>El personaje escogido</returns>
        private Character SelectCharacter(string message = "Select a character:")
        {
            Character selected = ConsoleListSelector <Character> .Select(
                this.characters,
                message
                );

            if (selected == null)
            {
                return(SelectCharacter());
            }
            return(selected);
        }