PDA

Ver la Versión Completa : Lograr hacer bien el programa


REHome
07-07-2020, 23:07:45
Hola:

Este código funciona a medias. Más bien, no logro situarlo. Está escrito en consola C#.

Lo que hace el programa:

Se usa solo las teclas flechas del teclado y la tecla Enter.

El programa empieza así;
https://www.subeimagenes.com/img/captura-2146558.gif

Como puedes ver arriba, puedes escribir con las flechas arriba y abajo letras para poner un nombre. Por ejemplo, voy a poner Hola amigo. Lo puedes ver en la captura de abajo.

https://www.subeimagenes.com/img/captura2-2146559.gif

Pulsa Enter.
Se muestra el > al lado de ATRÁS. Tal como muestra abajo.
https://www.subeimagenes.com/img/captura3-2146560.gif

Lo que debe hace en esta parte indicado en la imagen de arriba es:
1. Si toco las flechas del teclado izquierda y derecha, me señala con > Atrás o en GUARDAR.
2. Si pulso las flecha arriba o abajo, puedes volver a editar la palabra "Hola amigo", puedes corregir o escribir otra cosa.
3. Si pulsas Enter donde estabas escribiendo "Hola amigo", vuelves en ATRÁS con el >.
4. Estando en > ATRÁS, si pulsas Enter, muestra un mensaje tal como muestra en la captura de abajo y el programa se acaba ahí.

https://www.subeimagenes.com/img/captura4-2146561.gif

El problema que no me funciona esta parte y la que voy a indicar ahora tampoco me funciona.
Si estoy en > ATRÁS, al pulsas las flechas derecha o izquierda, debo estar ya en > GUARDAR.

Precisamente no me sale.

A parte de esto, si pulsas Enter cuando estés en > GUARDAR. Se queda guardado el texto "Hola amigo" guardado en una variable que en este caso se llama static string guardarNombre = "";

Se tiene que mostrar la imagen de abajo.
https://www.subeimagenes.com/img/captura5-2146562.gif

Y se acaba el programa.

Me perdí. Alguna idea como se programa esto.

Código C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LCD_nombre_archivo_consola_08
{
class Program
{
static string guardarNombre = "";
static int coordenadaX = 0;
private static ConsoleKey tecla;

// Caracteres de este array.
static readonly char[] roALFANUMERICO = new char[]
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
'¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '
};

// Dirección del carácter del array. El 80 presenta al espacio del array roALFANUMERICO.
static readonly int[] roINDICE_ARRAY = new int[]
{
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
};

private static readonly string[] roTEXTO = new string[] { "ATRÁS", "GUARDAR" };

static int index = 0;
static void Main(string[] args)
{
// Título de la pantalla.
Console.Title = "Cambiar nombre";

Inicio();
}

#region Inico.
private static void Inicio()
{
// Tamaño de la ventana.
Console.SetWindowSize(20, 5); // X

// Fondo verde, azul, gris.
Console.BackgroundColor = ConsoleColor.Gray;

// Letras negras, blanco, negro.
Console.ForegroundColor = ConsoleColor.Black;

// Limpiar pantalla.
Console.Clear();

Console.SetCursorPosition(0, 0);
Console.Write("Nombre del relé 1: ");
Console.SetCursorPosition(0, 1);
//Console.Write("AAAAAAAAAAAAAAAA");

// Recorre todo el índice del array y el de los datos alfanumérico
// y los rellena.
for (int i = 0; i < roINDICE_ARRAY.Length; i++)
{
Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
}

Console.SetCursorPosition(2, 3);
Console.Write(roTEXTO[0]); // ATRÁS.
Console.SetCursorPosition(12, 3);
Console.Write(roTEXTO[1]); // GUARDAR.

while (true)
{
Console.SetCursorPosition(coordenadaX, 1);

// Almacena cualquier tecla pulsada en la variable key.
tecla = Console.ReadKey(true).Key;
switch (tecla)
{
case ConsoleKey.RightArrow:
if (coordenadaX < 15)
{
coordenadaX++;
}
break;

case ConsoleKey.LeftArrow:
if (coordenadaX > 0)
{
coordenadaX--;
}
break;

case ConsoleKey.UpArrow:
roINDICE_ARRAY[coordenadaX]++;
if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
{
roINDICE_ARRAY[coordenadaX] = 0;
}
Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
break;

case ConsoleKey.DownArrow:
roINDICE_ARRAY[coordenadaX]--;
if (roINDICE_ARRAY[coordenadaX] < 0)
{
roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
}
Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
break;

case ConsoleKey.Enter:
Console.SetCursorPosition(1, 3);
Console.CursorVisible = false;
Console.Write(">");

while (true)
{
tecla = Console.ReadKey(true).Key;

switch (tecla)
{
case ConsoleKey.RightArrow:
case ConsoleKey.LeftArrow:
index = 1 - index;
break;

case ConsoleKey.UpArrow:
case ConsoleKey.DownArrow:
Console.SetCursorPosition(coordenadaX, 1);
break;

case ConsoleKey.Enter:

break;
}

for (int a = 0; a < 2; a++)
{
Console.SetCursorPosition(1 + (10 * a), 3);
if (a == index)
{
Console.Write(">");
}
else
{
Console.Write(" ");
}
}

if (index == 0) // se pulsó Atrás
{
Atras();
//break; // vuelve a la edición de letras
}

if (index == 1) // se pulsó Guardar
{
Guardar();
}
}
}
}
}
#endregion

private static void Atras()
{
Console.Clear();
Console.SetCursorPosition(0, 1);
Console.Write("HAS PULSADO ATRÁS ");
Console.ReadKey(); // Pulse cualquier tecla para salir.
}

private static void Guardar()
{
Console.Clear();
Console.SetCursorPosition(0, 1);
Console.Write("HAS GUARDADO ");
for (int a = 0; a < roINDICE_ARRAY.Length; a++)
{
guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
}
Console.SetCursorPosition(0, 2);
Console.Write(guardarNombre);
}
}
}


Gracias.