static void MenuFiguras() { while (true) { Console.WriteLine("\nLas figuras que tenemos disponibles son:"); for (int i = 0; i < figureTypes.Count; i++) { Console.WriteLine($"[{i + 1}]: {figureTypes[i].Name}"); } Console.WriteLine($"[{OPCION_SALIR}] Volver al menú\n"); int opcion = Usuario.PedirEntero("¿Cuál quieres seleccionar?"); if (opcion == 0) { break; } else { int indice = opcion - 1; bool estaEnLaLista = indice >= 0 || indice < figureTypes.Count; if (estaEnLaLista) { Type tipoFigura = figureTypes[indice]; var constructorInfo = tipoFigura.GetConstructors()[0]; var constructorParams = constructorInfo.GetParameters(); var parameters = new object[constructorParams.Length]; for (int i = 0; i < constructorParams.Length; i++) { parameters[i] = Usuario.PedirLado(string.Format("\nIngresa el valor de {0}:", constructorParams[i].Name)); } Figura figura = (Figura)constructorInfo.Invoke(parameters); MenuFigura(figura); } else { Log.Error($"La opción ingresada ({opcion}) no existe"); } } } }
static void MenuFigura(Figura figura) { Log.Success($"\n¡Haz creado tu {figura.Nombre}!"); while (true) { Console.WriteLine(""); Log.Question($"¿Qué quieres saber de este {figura.Nombre}?"); Console.WriteLine($"[{OPCION_CALCULAR_AREA}] Calcular área"); Console.WriteLine($"[{OPCION_CALCULAR_PERIMETRO}] Calcular perímetro"); Console.WriteLine($"[{OPCION_SALIR}] Volver al menú de figuras"); Console.WriteLine(""); string opcion = Console.ReadLine(); if (opcion == OPCION_CALCULAR_AREA) { Log.Write("Calculando área...\n"); Log.Success($"El área de tu {figura.Nombre} es {figura.Area()}\n"); Usuario.PresionarParaContinuar(); } else if (opcion == OPCION_CALCULAR_PERIMETRO) { Log.Write("Calculando perímetro...\n"); Log.Success($"El perímetro de tu {figura.Nombre} es {figura.Perimetro()}\n"); Usuario.PresionarParaContinuar(); } else if (opcion == OPCION_SALIR) { Console.Clear(); break; } else { Log.Error("La opción ingresada ({0}) no existe"); Usuario.PresionarParaContinuar(); } } }