using System.Collections.Generic;
public abstract string Nombre { get; }
public abstract void Interactuar();
public abstract void Describir();
abstract class Objeto : Entidad
public string Descripcion { get; set; }
public override string Nombre => "Espada mágica";
public override void Interactuar()
Console.WriteLine("¡Preparas tu espada mágica para el combate!");
public override void Describir()
Console.WriteLine($"Espada mágica: {Descripcion}");
public override string Nombre => "Poción de velocidad";
public override void Interactuar()
Console.WriteLine("Bebes la poción de velocidad y te sientes ágil.");
public override void Describir()
Console.WriteLine($"Poción de velocidad: {Descripcion}");
public string Nombre { get; set; }
public List<Objeto> Inventario { get; private set; } = new List<Objeto>();
private HashSet<int> caminosVisitados = new HashSet<int>();
public void AgregarObjeto(Objeto objeto)
Console.WriteLine($"Has recolectado: {objeto.Nombre}");
public void MostrarInventario()
Console.WriteLine("\nInventario del Jugador:");
if (Inventario.Count == 0)
Console.WriteLine("Aún no has recolectado ningún objeto.");
foreach (var objeto in Inventario)
public void MarcarCaminoVisitado(int camino)
caminosVisitados.Add(camino);
public bool EsCaminoVisitado(int camino)
return caminosVisitados.Contains(camino);
public bool TieneObjeto(string nombreObjeto)
return Inventario.Exists(objeto => objeto.Nombre.Equals(nombreObjeto, StringComparison.OrdinalIgnoreCase));
public int ContarCaminosVisitados()
return caminosVisitados.Count;
private static Jugador jugador = new Jugador { Nombre = "Aventurero" };
private static readonly Dictionary<int, string> caminos = new Dictionary<int, string>
{ 2, "camino a la cueva" },
{ 3, "camino a la colina" },
{ 4, "camino al templo" },
{ 5, "camino al puente" }
private static readonly Dictionary<int, Objeto> objetosPorCamino = new Dictionary<int, Objeto>
{ 1, new Pocion { Descripcion = "Un líquido centelleante que te permite moverte rápidamente." } },
{ 2, new Arma { Descripcion = "Una hoja que brilla con la luz de las estrellas." } },
{ 3, new Pocion { Descripcion = "Una poción curativa que restaura tu salud." } },
{ 4, new Arma { Descripcion = "Una espada de acero forjado para grandes batallas." } },
{ 5, new Pocion { Descripcion = "Una poción de invisibilidad que te permite evitar peligros." } }
public static void IniciarJuego()
private static void MostrarIntroduccion()
Console.WriteLine("---------------------------------------------------");
Console.WriteLine("¡Bienvenido al Bosque Encantado, aventurero!");
Console.WriteLine("---------------------------------------------------");
Console.WriteLine("Tu misión es encontrar al Dragón legendario que vive en lo profundo del bosque.");
Console.WriteLine("Para llegar a él, deberás explorar dos caminos diferentes, cada uno con su propio desafío y recompensa.");
Console.WriteLine("Recolecta los objetos necesarios para enfrentarte al Dragón y cumplir tu misión.");
Console.WriteLine("¡Buena suerte en tu aventura!");
Console.WriteLine("---------------------------------------------------");
private static void MostrarMenu()
string[] opcionesMenu = { "Explorar", "Ver inventario", "Salir" };
Console.WriteLine("\nMenú:");
for (int i = 0; i < opcionesMenu.Length; i++)
Console.WriteLine($"{i + 1}. {opcionesMenu[i]}");
Console.Write("Elige una opción: ");
string eleccion = Console.ReadLine().Trim().ToLower();
jugador.MostrarInventario();
Console.WriteLine("Opción no válida. Por favor, elige una opción del menú.");
if (jugador.ContarCaminosVisitados() >= 2)
Console.WriteLine("\n¡Has explorado dos caminos!");
private static void Explorar()
Console.WriteLine("\nElige un camino para explorar:");
for (int i = 1; i <= caminos.Count; i++)
Console.WriteLine($"{i}. {caminos[i]}");
if (int.TryParse(Console.ReadLine().Trim(), out int camino) && caminos.ContainsKey(camino))
if (jugador.EsCaminoVisitado(camino))
Console.WriteLine("Ya has explorado este camino. Elige otro camino.");
Console.WriteLine($"\nExploras el {caminos[camino]}.");
Console.WriteLine("El camino al río está bordeado de arbustos y flores brillantes. El murmullo del agua te acompaña mientras te adentras en el sendero.");
Console.WriteLine("Después de un corto recorrido, encuentras una antigua cabaña de madera con una caja en el interior.");
Console.WriteLine("¡Has encontrado una poción de velocidad en la caja!");
Console.WriteLine("El camino a la cueva es oscuro y estrecho, con paredes de roca y humedad en el aire.");
Console.WriteLine("Dentro de la cueva, un brillo metálico en el suelo te llama la atención.");
Console.WriteLine("¡Recoges una espada mágica que estaba oculta entre las piedras!");
Console.WriteLine("El camino a la colina está cubierto de hierba alta y rocas. La vista desde arriba es impresionante.");
Console.WriteLine("Entre las rocas encuentras una pequeña botella brillante.");
Console.WriteLine("¡Es una poción curativa que puede restaurar tu salud!");
Console.WriteLine("El camino al templo está adornado con viejas estatuas y símbolos misteriosos.");
Console.WriteLine("Dentro del templo, en un pedestal dorado, encuentras una antigua espada.");
Console.WriteLine("¡Es una espada de acero forjado, perfecta para grandes batallas!");
Console.WriteLine("El camino al puente es largo y serpenteante, con el río burbujeando abajo.");
Console.WriteLine("En medio del puente, encuentras una pequeña caja con una poción oculta.");
Console.WriteLine("¡Es una poción de invisibilidad que puede ayudarte a evitar peligros!");
Console.WriteLine("No encuentras nada de interés en este camino.");
if (objetosPorCamino.TryGetValue(camino, out Objeto objetoEncontrado))
jugador.AgregarObjeto(objetoEncontrado);
jugador.MarcarCaminoVisitado(camino);
Console.WriteLine("Opción no válida.");
private static void EnfrentarDragon()
Console.WriteLine("\n¡Finalmente llegas a la guarida del Dragón!");
if (jugador.TieneObjeto("Espada mágica"))
Console.WriteLine("Con la espada mágica en mano, enfrentas al Dragón en un combate épico.");
Console.WriteLine("El Dragón ruge y lanza fuego, pero con tu espada, logras derrotarlo.");
Console.WriteLine("¡Has vencido al Dragón y completado tu misión con éxito!");
else if (jugador.TieneObjeto("Poción de velocidad"))
Console.WriteLine("El Dragón te detecta y comienza a atacar. Pero gracias a la poción de velocidad, logras escapar rápidamente.");
Console.WriteLine("¡Has evitado el enfrentamiento y sobrevivido para contar la historia!");
Console.WriteLine("Sin los objetos necesarios, el Dragón te vence con facilidad.");
Console.WriteLine("¡Tu aventura ha terminado aquí!");
private static void SalirJuego()
Console.WriteLine("¡Gracias por jugar! ¡Hasta la próxima aventura!");
static void Main(string[] args)