REHome |
07-08-2024 17:37:17 |
Me salió al final.
El código "is horrible 2".
Al menos funciona, :D:D:D:D:D
Lo dejo aquí por si alguien se estalla de la risa.
Código:
using System;
namespace Pruebas_Opciones_Consola_01
{
internal class Program
{
static void Main(string[] args)
{
#region Configuración ventana.
// Título de la ventana.
Console.Title = "Opciones";
// Tamaño de la ventana, x, y o, ancho y alto.
const byte ancho = 20, alto = 5;
Console.SetWindowSize(ancho, alto);
// Quitar scroll laterales. Derecho y abajo.
Console.SetBufferSize(ancho, alto);
// Color de fondo.
Console.BackgroundColor = ConsoleColor.Black;
// Color de las letras.
Console.ForegroundColor = ConsoleColor.Gray;
// Limpiar pantalla y dejarlo todo en color de fondo.
Console.Clear();
// Visible el cursor. // No! Así lo haces invisible.
Console.CursorVisible = false;
#endregion
Menu();
void Menu()
{
sbyte indiceSeleccionado = 0; // Índice seleccionado de cada opción del menú.
bool salir = false; // Para salir del menú principal al INICIO.
sbyte SELECCION_OPCIONES_TOTALES = 3; // Total de opciones para seleccionar y fija.
bool opcionA = true;
bool opcionB = false;
bool opcionC = false;
string opA = "x";
string opB = " ";
string opC = " ";
// Capturar tecla para luego validar.
ConsoleKey tecla;
do
{
//******************************************************************
// Dibujo el menú principal.
switch (indiceSeleccionado)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.Write(" ** TÍTULO ** ");
Console.SetCursorPosition(0, 1);
Console.Write("> ( ) Opción A ");
Console.SetCursorPosition(0, 2);
Console.Write(" ( ) Opción B ");
Console.SetCursorPosition(0, 3);
Console.Write(" ( ) Opción C ");
if ((opcionA == true) && (opcionB == false) && (opcionC == false))
{
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
}
else
{
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
}
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.Write(" ** TÍTULO ** ");
Console.SetCursorPosition(0, 1);
Console.Write(" ( ) Opción A ");
Console.SetCursorPosition(0, 2);
Console.Write("> ( ) Opción B ");
Console.SetCursorPosition(0, 3);
Console.Write(" ( ) Opción C ");
if (opcionA == false && opcionB == true && opcionC == false)
{
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
}
else
{
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
}
break;
case 2:
Console.SetCursorPosition(0, 0);
Console.Write(" ** TÍTULO ** ");
Console.SetCursorPosition(0, 1);
Console.Write(" ( ) Opción A ");
Console.SetCursorPosition(0, 2);
Console.Write(" ( ) Opción B ");
Console.SetCursorPosition(0, 3);
Console.Write("> ( ) Opción C ");
if (opcionA == false && opcionB == false && opcionC == true)
{
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
}
else
{
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
}
break;
case 3:
Console.SetCursorPosition(0, 0);
Console.Write(" ** TÍTULO ** ");
Console.SetCursorPosition(0, 1);
Console.Write("> SALIR ");
Console.SetCursorPosition(0, 2);
Console.Write(" ");
Console.SetCursorPosition(0, 3);
Console.Write(" ");
break;
default:
Console.Write("Fuera de rango. ");
break;
}
// Fin de pintar el menú principal.
//******************************************************************
// Leer tecla ingresada por el usuario.
tecla = Console.ReadKey(true).Key;
// Validar el tipo de tecla.
if (tecla == ConsoleKey.Enter)
{
switch (indiceSeleccionado)
{
case 0:
opcionA = true;
opcionB = false;
opcionC = false;
opA = "x";
opB = " ";
opC = " ";
break;
case 1:
opcionA = false;
opcionB = true;
opcionC = false;
opA = " ";
opB = "x";
opC = " ";
break;
case 2:
opcionA = false;
opcionB = false;
opcionC = true;
opA = " ";
opB = " ";
opC = "x";
break;
case 3:
indiceSeleccionado = 0; // Restaurar índice antes de salir.
salir = true; // Salir
break;
default:
Console.Write("Fuera de rango. ");
break;
}
}
// ¿Has pulsado tecla flecha Abajo?
if (tecla == ConsoleKey.DownArrow)
{
indiceSeleccionado++;
}
// Entonces si pulsas tecla flecha Arriba.
if (tecla == ConsoleKey.UpArrow)
{
indiceSeleccionado--;
}
// Si está en la última opción, salta a la primera.
if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)
{
indiceSeleccionado = 0;
}
// Si está en la primera posición, salta a la última.
if (indiceSeleccionado < 0)
{
indiceSeleccionado = SELECCION_OPCIONES_TOTALES;
}
// Uso la tecla escape como salida.
} while (!salir);
}
}
}
}
El o la que sepa mejorarlo, adelante. Tiene un buen reto y largo. :)
|