SoloCodigo
CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: jcSharp en Viernes 11 de Febrero de 2005, 01:42
-
Saludos a todos.
tengo algo de tiempo programando en C# y ahora estoy experimientando con las aplicaciónes de tipo consola (es decir, como programar en ms-dos).
resulta que estoy haciendo un video juego, pero resulta que tengo un ciclo while
del cual me tengo que salir cuando presione cualquier tecla (es decir, con solo presionar el teclado).
y resulta que con :
Console.ReadLine()
// no es posible, porque no puedo meterlo dentro del do-while
algo así
do
{
}
while (presionar cualquier tecla);
en turbo C y leguajes tipos c se utiliza una funcion llamanda "kbhit" pero aqui eso no existe.
agradeceré alguien me pueda ayudar.
PD. espero tambien ayudarte si tienes problemas despues.
Gracias.
-
Y si intentas algo así :
string var = Console.ReadLine();
while(var != null)
{
//Código que se ejecutaría mientras no sea nula la variable
}
Espero te sirva.... :hola:
-
Eso lo puedes lograr invocando rutinas de la API de windows, en el ejemplo que te he colocado puedes ver como usar la API desde C# (aunque algunas cosas obviamente no estan alli... tendras que preguntar sino lo logras hacer) con estos ajemplos ya puedes hacerte una idea y utilizar la api para lo que quieres realizar...
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
using System;
using System.Runtime.InteropServices;
namespace Engine_Estados
{
public class Entrada_class
{
#region Llamado a funciones de la API
[DllImport("kernel32", SetLastError=true)]
static extern IntPtr GetStdHandle(IntPtr whichHandle);
[DllImport("kernel32", SetLastError=true)]
static extern bool GetConsoleMode(IntPtr handle, out uint mode);
[DllImport("kernel32", SetLastError=true)]
static extern bool SetConsoleMode(IntPtr handle, uint mode);
#endregion
#region Variables para manejo de la API
static readonly IntPtr STD_INPUT_HANDLE = new IntPtr(-10);
private IntPtr hConsoleHandle;
const uint ENABLE_LINE_INPUT = 2;
const uint ENABLE_ECHO_INPUT = 4;
uint modo, nmodo;
#endregion
public Entrada_class()
{
hConsoleHandle = GetStdHandle(STD_INPUT_HANDLE);
GetConsoleMode(hConsoleHandle, out modo);
nmodo = modo & ~(ENABLE_LINE_INPUT |ENABLE_ECHO_INPUT);
SetConsoleMode(hConsoleHandle, nmodo);
}
~Entrada_class()
{
SetConsoleMode(hConsoleHandle, modo);
}
public int Leer()
{
return Console.Read();
}
public void Leer(char car)
{
while(Console.Read() != car);
}
public int Leer(bool modoNormal)
{
int ret;
if(modoNormal)
{
SetConsoleMode(hConsoleHandle, modo);
ret = Console.Read();
SetConsoleMode(hConsoleHandle, nmodo);
}
else
ret = Console.Read();
return ret;
}
}
}
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
Ahora si yo fuera tu usaria mejor alguna libreia como DirectX, especificamente DirectInput para poder hacerlo más facilmente y porque ademas incorporan muchas otras funcionalidades que te pueden ser de utilidad.
-
;)
Orale, excelente tocayo (asi se le llama en méxico a las personas con el mismo nombre de uno).
Actualmente bajé una librería que utiliza puras API's, llamada xConsole que aparte enriquecí agregandole varios métodos mas :-), voy a buscar un API que me permita hacer una interrupción al teclado,
sabes que algun sitio donde pueda investigar las API's??
o donde puedo encontrar todos los métodos de kernel32.dll ?
muchas gracias Juan Carlos y si necesitas ayuda, preguntame y a lo mejor entre los dos le encontramos, Saludos :-).
Atte.
Juan Carlos Vazquez
---------------------------
Ing. en Sistemas Computacionales
México
-
voy a buscar un API que me permita hacer una interrupción al teclado,
Lamentablementa a travez de C# no lo puedes hacer, de ehcho con ningun lenguaje lo puedes hacer si estas en versoines de Windows ba<sadas en win32, solo puedes hacer eso en sistemas derivados del DOS, ya que los niveles de proteccion del sistema operativo no permiten cceder hoy dia a ese tipo de recursos... pues para ello esta la API, para ocultar la complejidad del hardware y de las capas bajas del sistema operativo, en todo caso si encuentras algo me cuentas, aunque no creo que encuentres nada.
sabes que algun sitio donde pueda investigar las API's??
NO, pero lo que pasa es que hablar de una API a mi manera de verlo es algo como medio 'abastracto' ya que una APi no es más que una libreria comun y corriente, pero se supone que hace muchisimas cosas y hace ver faciles las cosas dificiles.
o donde puedo encontrar todos los métodos de kernel32.dll ?
En la pagina de msdn pero debes buscar como acceso a la pai de windows o platform SDK, generalmente ese tipo de infromacion se encuentra en las ayudas de las librerias.