Probando el último código en C#, lo primero me da errores por todas partes, y nunca había visto usar goto que se aconseja no usarlo en C# ni en Visual Basic para evitar malos hábitos.
Saludos.
Normal, ni siquiera lo he testeado jaja. Simplemente he usado una conversión online y luego lo pegué.
De todos modos básicamente lo que interesa es la función
Mecanografiar para hacer los efectos de sonido.
En cuanto el uso de GOTO, antiguamente en Basic se usaba muchísimo, y en tal caso no veo porqué no. Yo tuve un ordenador Sharp que funcionaba con Basic y un Commodore64 y era bastante habitual.
Saludos
Pues, así es. En C# no funciona
Para empezar C# no permite esto (y supongo que tampoco en C++):
System.Threading.Thread.Sleep(0.09 * 1000);
Es decir, usar un valor temporal inferior a un segundo de este modo (0.09 * 1000). En lugar de eso simplemente poner, por ejemplo:
System.Threading.Thread.Sleep(100);
Esto es imprescindible para conseguir el efecto de tecla (tac, tac, tac,...) pues, sólo hace un tic similar a una tecla, sin determinarse claramente que sonido suena.
[CORREGIDO EN C#]using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
public static void Main()
{
Console.WindowWidth = 80;
Console.WindowHeight = 43;
Console.Title = "Retro-Consola";
Console.BackgroundColor = ConsoleColor.Black;
// Fondo pantalla blanco.
Console.Clear();
// Limpiar pantalla.
Console.ForegroundColor = ConsoleColor.Green;
// Color texto azul.
Console.CursorVisible = false;
j1:;
string Cadena = string.Format("{0}{1}{0}{0}{2}", Environment.NewLine, "█ POR FAVOR, INTRODUZCA EL CÓDIGO DE ACCESO █", "CÓDIGO DE ACCESO:_ ");
Mecanografiar(Cadena);
string Entrada;
Entrada = Console.ReadLine();
if (Entrada == "12345") {
Cadena = string.Format("{0}{1}{0}{0}{2}{0}{3}{0}{4}", Environment.NewLine, "*** CÓDIGO DE ACCESO ACEPTADO ***", "████████████████████████████████████████", "█ BIENVENIDO DOCTOR FRANKESTEIN █", "████████████████████████████████████████");
Mecanografiar(Cadena);
} else {
Cadena = string.Format("{0}{1}{0}", Environment.NewLine, "*** CÓDIGO DE ACCESO DENEGADO ***");
Mecanografiar(Cadena);
goto j1;
}
Console.ReadKey();
}
public static void Mecanografiar(string Cadena)
{
foreach (char Letra in Cadena)
{
if ((Letra) == Convert.ToChar(ConsoleKey.Enter))
{
System.Threading.Thread.Sleep(750);
//Espera 0.75 segundos antes de hacer el salto de línea
Console.Beep(600, 100);
// beep de salto de línea
}
else
{
System.Threading.Thread.Sleep(90);
Console.Write(Letra);
// Hacer sonido solo cuando el caracter sea distinto de espacio
if ((Letra) != Convert.ToChar(ConsoleKey.Spacebar))
{
Console.Beep(500, 9);
}
}
}
}
}
}
La función para crear el efecto:
public static void Mecanografiar(string Cadena)
{
foreach (char Letra in Cadena)
{
if ((Letra) == Convert.ToChar(ConsoleKey.Enter))
{
System.Threading.Thread.Sleep(750);
//Espera 0.75 segundos antes de hacer el salto de línea
Console.Beep(600, 100);
// beep de salto de línea
}
else
{
System.Threading.Thread.Sleep(90);
Console.Write(Letra);
// Hacer sonido solo cuando el caracter sea distinto de espacio
if ((Letra) != Convert.ToChar(ConsoleKey.Spacebar))
{
Console.Beep(500, 9);
}
}
}
}
Para modificar la velocidad cambia el valor de 90 a menos o más según prefieras:
System.Threading.Thread.Sleep(90)
En un principio puse 130, pero es demasiado lento. Creo que 90 está bien.
Saludos
Puede usarse
TimeSpan en lugar de usarse
Sleep del siguiente modo:
TimeSpan interval
= new TimeSpan
(0,
0,
0,
0,
90); Thread.Sleep(interval);
Ejemplo:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string cadena = "Ejemplo de como usar TimeSpan..." +
Environment.NewLine +
"... En lugar de usar Speep";
Mecanografiar(cadena);
}
public static void Mecanografiar(string Cadena)
{
foreach (char Letra in Cadena)
{
if ((Letra) == Convert.ToChar(ConsoleKey.Enter))
{
TimeSpan interval
= new TimeSpan
(0,
0,
0,
0,
500); Thread.Sleep(interval);
//System.Threading.Thread.Sleep(750);
//Espera 0.75 segundos antes de hacer el salto de línea
Console.Beep(600, 100);
// beep de salto de línea
}
else
{
TimeSpan interval
= new TimeSpan
(0,
0,
0,
0,
90); Thread.Sleep(interval);
// System.Threading.Thread.Sleep(90);
Console.Write(Letra);
// Hacer sonido solo cuando el caracter sea distinto de espacio
if ((Letra) != Convert.ToChar(ConsoleKey.Spacebar))
{
Console.Beep(500, 9);
}
}
}
}
}
}