Estoy seguro de que esto debe haberse preguntado antes, pero una búsqueda rápida no encontró nada.Obteniendo las teclas de flecha de cin
¿Cómo puedo obtener las teclas de flecha/dirección con cin
en C++?
Estoy seguro de que esto debe haberse preguntado antes, pero una búsqueda rápida no encontró nada.Obteniendo las teclas de flecha de cin
¿Cómo puedo obtener las teclas de flecha/dirección con cin
en C++?
De hecho, se ha preguntado antes, y la respuesta es que no puede hacerlo.
C++ no tiene el concepto de un teclado o una consola. Solo sabe de un flujo de datos de entrada opaco.
Su consola física preprocesa y almacena en búfer la actividad de su teclado y solo envía datos cocinados al programa, generalmente línea por línea. Para hablar directamente con el teclado, necesita una biblioteca de manejo de terminales específica de la plataforma.
En Linux, esto generalmente se hace con las bibliotecas ncurses
o termcap
/terminfo
. En Windows puede usar pdcurses
, o quizás la API de Windows (aunque no estoy familiarizado con ese aspecto).
Marcos de aplicaciones gráficas como SDL, Allegro, Irrlicht u Ogre3D vienen con manejo completo del teclado y el mouse, también.
Aquí hay un puntero si no te importa usar getch()
ubicado en conio.h
.
#include <stdio.h>
#include <conio.h>
#define KB_UP 72
#define KB_DOWN 80
#define KB_LEFT 75
#define KB_RIGHT 77
#define KB_ESCAPE 27
int main()
{
int KB_code=0;
while(KB_code != KB_ESCAPE)
{
if (kbhit())
{
KB_code = getch();
printf("KB_code = %i \n",KB_code);
switch (KB_code)
{
case KB_LEFT:
//Do something
break;
case KB_RIGHT:
//Do something
break;
case KB_UP:
//Do something
break;
case KB_DOWN:
//Do something
break;
}
}
}
return 0;
}
Tienes suerte de que no estés familiarizado con winAPI. ¡La ignorancia es felicidad! :) – FailedDev
@FailedDev: hehe - Sé un poco, y he visto mi parte de trabalenguas húngaros y 'LPHANDLE's :-) Nunca he visto nada relacionado con el manejo de terminales en bruto ... siento gratis para entrar con algunos consejos! :-) –
:) No he hecho algo así tampoco, aunque estoy seguro de que es posible. Pero OP no parece estar interesado en un SO específico, aunque debería :) – FailedDev