Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: etcheverrypablol en 8 Enero 2016, 08:52 am



Título: funciones similares a kbhit y getch en c++ gnu/linux
Publicado por: etcheverrypablol en 8 Enero 2016, 08:52 am
Hola, estoy haciendo un programa en c++, de un avión que tiene que esquivar a meteoritos que vienen cayendo. El avión se debería mover con las teclas de izquierda y derecha. Preciso de alguna función que al momento de presionar algunas de estas dos teclas, almacene un valor en una variable, para de esta forma saber para dónde el juegador quiere mover el avión. Estuve averiguando en interntet, y sólo encuentro que dicen que hay que incluir la libería conio.h y que hay que usar las funciones kbhit y getch. Pero mi compilador no me recnonce ni la librería ni las funciones debido a, creo, que esas se deben usar cuando estás en windows. Y yo uso gnu/linux. Estoy uando el sistema operativo Manjaro, y compilanto en el terminal. Con el siguiente comando:
$ g++ space.cpp -o space

Alguno sabe qué funciones alternativas tengo a las ya nombradas. Desde ya muchas gracias.



Mod: No escribir los títulos en mayúsculas


Título: Re: FUNCIONES SIMILARES A KBHIT Y GETCH EN C++ GNU/LINUX
Publicado por: MAFUS en 8 Enero 2016, 10:39 am
Esto lo puedes hacer con ncurses, es una librería para manejar la consola.


Título: Re: funciones similares a kbhit y getch en c++ gnu/linux
Publicado por: Stakewinner00 en 8 Enero 2016, 17:14 pm
Haciendo una búsqueda rápida puedes encontrar cosas como http://stackoverflow.com/a/16361724  que ya podrían servir para substituir a la función getch de la librería conio.h


Título: Re: funciones similares a kbhit y getch en c++ gnu/linux
Publicado por: JavierScars en 8 Enero 2016, 18:10 pm
No se si tiene mucho que ver el hecho de que estas en linux para esa libreria... Pero si recuerdo que algunas tienen que ser especificadas con "-l" o álgo asi. en otras palabras prueba a ver si tienes que linkearla.


Título: Re: funciones similares a kbhit y getch en c++ gnu/linux
Publicado por: etcheverrypablol en 8 Enero 2016, 21:30 pm
No puedo creer lo dificil que se me está haciendo esto, de encontrar una respuesta en interntet, cuando considero que debería ser algo ya re sabido por muchos y fácil. Lo que necesito es una forma de hacer lo siguiente:
    Si (el usuario presiona una tecla){  // Tecla izquierda o derecha
       hacer tal cosa
   }
En esa condición lógica, ¿qué tendría que colocar? Porque solo se debería ejecutar la sentencia del bloque "Si" sólo si se presiona una tecla. De esta forma, no se frena el programa, esperando que el usuario presione una.
He visto que muchos utilizan la función kbhit, de la librería conio. Pero yo necesito otra alternativa, ya que no puedo usar esa en linux. Alguno sabe cuál es la solución a este problema? Gracias.


Título: Re: funciones similares a kbhit y getch en c++ gnu/linux
Publicado por: furby86 en 8 Enero 2016, 21:55 pm
Puedes probar a asignar a una variable el valor de una tecla.

como el siguiente código escrito y probado en ubuntu.

Código:
#include <stdio.h>
#include <ctype.h>

void main(){
char tecla=getchar();
printf("La tecla es %d",tecla);
}

Es una idea.


Título: Re: funciones similares a kbhit y getch en c++ gnu/linux
Publicado por: etcheverrypablol en 8 Enero 2016, 22:41 pm
Hola furby86, gracias por responder. Me parece que eso no es precisamente lo que necesito, porque eso frenaría el programa hasta que se lea una tecla. Yo preciso que se siga ejecutanto el programa, y si(se presiona una tecla) entonces hacer tal cosa.



No se si tiene mucho que ver el hecho de que estas en linux para esa libreria... Pero si recuerdo que algunas tienen que ser especificadas con "-l" o álgo asi. en otras palabras prueba a ver si tienes que linkearla.

Hola JavierScars, gracias, lo voy a tener en cuenta. Saludos.



Esto lo puedes hacer con ncurses, es una librería para manejar la consola.

Hola MAFUS, estuve averiguando sobre esa librería, parece ser que es la que reemplaza a la conio.h. Me va a ser de utilidad parece ser, pero aún no encuentro la solcuión al problema. Muchas gracias por responder. Saludos.


Título: Re: funciones similares a kbhit y getch en c++ gnu/linux
Publicado por: MAFUS en 8 Enero 2016, 23:12 pm
Para leer flechas
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/keys.html

Para que no pare el programa
http://stackoverflow.com/questions/4025891/create-a-function-to-check-for-key-press-in-unix-using-ncurses

Como ves puedes hacer lo que quieres con ncurses.


Título: Re: funciones similares a kbhit y getch en c++ gnu/linux
Publicado por: Stakewinner00 en 9 Enero 2016, 12:40 pm
Código
  1. #include <unistd.h>
  2. #include <termios.h>
  3. #include <cstdio>
  4.  
  5. char getch(){
  6.    /*#include <unistd.h>   //_getch*/
  7.    /*#include <termios.h>  //_getch*/
  8.    char buf=0;
  9.    struct termios old={0};
  10.    fflush(stdout);
  11.    if(tcgetattr(0, &old)<0)
  12.        perror("tcsetattr()");
  13.    old.c_lflag&=~ICANON;
  14.    old.c_lflag&=~ECHO;
  15.    old.c_cc[VMIN]=1;
  16.    old.c_cc[VTIME]=0;
  17.    if(tcsetattr(0, TCSANOW, &old)<0)
  18.        perror("tcsetattr ICANON");
  19.    if(read(0,&buf,1)<0)
  20.        perror("read()");
  21.    old.c_lflag|=ICANON;
  22.    old.c_lflag|=ECHO;
  23.    if(tcsetattr(0, TCSADRAIN, &old)<0)
  24.        perror ("tcsetattr ~ICANON");
  25.    printf("%c\n",buf);
  26.    return buf;
  27. }
  28.  
  29. int main() {
  30.  if(getch() == 'X') {
  31.      //hacer lo que sea
  32.  }
  33. }
  34.  
  35.  


Título: Re: funciones similares a kbhit y getch en c++ gnu/linux
Publicado por: etcheverrypablol en 18 Enero 2016, 19:09 pm
Muchas gracias chicos