elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  AYUDA!! kbhit() en linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: AYUDA!! kbhit() en linux  (Leído 10,903 veces)
godofredo

Desconectado Desconectado

Mensajes: 8


Ver Perfil
AYUDA!! kbhit() en linux
« en: 4 Abril 2011, 16:26 pm »

Hola a todos, despues de mucho buscar en google y no entender ni jota (soy nuevo en esto de C), queria que me explicaran por favor si hay algun modo de emular kbhit() en linux.
estoy haciendo un pequeño juego y quiero que se repita un bucle hasta que el usuario apriete una tecla, pero soy totalmente incapaz.
gracias a todos por adelanatdo


En línea

ssaammuu

Desconectado Desconectado

Mensajes: 35



Ver Perfil WWW
Re: AYUDA!! kbhit() en linux
« Respuesta #1 en: 5 Abril 2011, 23:14 pm »

Hola,
alomejor esto te ayuda:
http://linux-sxs.org/programming/kbhit.html

define una function khbit que emula la de msdos, hay codigo para implementarlo en c y en c++


En línea

godofredo

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: AYUDA!! kbhit() en linux
« Respuesta #2 en: 5 Abril 2011, 23:47 pm »

Gracias por tu aporte, entonces  debo hacer una libreria con KBHIT.H y KBHIT.C, o tengo que meterlo en mi codigo de algun modo?¿?
pdt: se me olvido ponerlo pero mi codigo es para C , no para C++ aunque no se si hay diferencia en lo que busco.
« Última modificación: 5 Abril 2011, 23:48 pm por godofredo » En línea

ssaammuu

Desconectado Desconectado

Mensajes: 35



Ver Perfil WWW
Re: AYUDA!! kbhit() en linux
« Respuesta #3 en: 5 Abril 2011, 23:50 pm »

lo mas simple seria copiar kbhit.h y kbhit.c a la carpeta donde tienes los demas ficheros y simplemente
Código:
#include "khbit.h"

las dos hacen lo mismo solo que la version en c++ esta implementada en una clase, aunque si estas usando c no te preocupes por eso
« Última modificación: 5 Abril 2011, 23:53 pm por ssaammuu » En línea

godofredo

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: AYUDA!! kbhit() en linux
« Respuesta #4 en: 5 Abril 2011, 23:53 pm »

y no hay que compilar de manera extaña ni nada?¡
En línea

ssaammuu

Desconectado Desconectado

Mensajes: 35



Ver Perfil WWW
Re: AYUDA!! kbhit() en linux
« Respuesta #5 en: 5 Abril 2011, 23:57 pm »

lo estas incluyendo directamente en tu proyecto a traves del #include, asi que se compilara con el resto de tu codigo
En línea

godofredo

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: AYUDA!! kbhit() en linux
« Respuesta #6 en: 6 Abril 2011, 00:09 am »

Me salta undefined referente to `kbhit'
En línea

ssaammuu

Desconectado Desconectado

Mensajes: 35



Ver Perfil WWW
Re: AYUDA!! kbhit() en linux
« Respuesta #7 en: 6 Abril 2011, 00:11 am »

eso significa que seguramente hayas escrito el numbre de alguna funcion o variable mal. Puedes enseñar el codigo?
En línea

godofredo

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: AYUDA!! kbhit() en linux
« Respuesta #8 en: 6 Abril 2011, 00:16 am »

El codigo no esta acabado y quedan muchas cosas por hacer, el problema salta en la linea 61, si quito el kbhit compila bien


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ncurses.h>
#include <unistd.h> /*sleep*/
#include "kbhit.h"

#define F 20
#define C 20
char fondo [F][C];
char serpiente[F*C][F*C];
int contador = 0;
int a,b;/*comida*/
int x=2,y=2;/*movimiento*/

void imprime (char matriz[F][C]);
void iniciar_matriz (char matriz[F][C]);
void movimiento ();
void comida();


int main()
{   
   
   initscr();
   nodelay(stdscr,TRUE);
   erase();
   
   
   iniciar_matriz(fondo);
   comida();      
   movimiento();

   getch();
   endwin();

return 0;
}


void movimiento ()
{
   char c='q',d;/*por ejemplo q*/
   
   
   
   while (c!='x')
   {   
       
       
       
      if((x==a)&&(y==b)){ contador++; comida();} /*para comer*/
      
      
      
      fondo
  • [y]='*';
      imprime(fondo);
      fondo
  • [y]=' ';
      d=c;
   
      if(kbhit()){c=getch();}
      
      
      
      if(c=='x'){break;}
      if(c=='w'){x=x-1;}
      if(c=='a'){y=y-1;}
      if(c=='s'){x=x+1;}
      if(c=='d'){y=y+1;}
      if(x<0){x=F-1;} /*si pongo F va a /0*/
      if(y<0){y=C-1;}
      if(x>(F-1)){x=0;}
      if(y>(C-1)){y=0;}
      sleep(1);
      
      c=d;
      
      
      
   }   
}




void iniciar_matriz (char matriz[F][C])
{
   int i, j;
   for (i=0;i<F;i++)
   {
      for (j=0;j<C;j++)
      {
         fondo[j]=' ';
      }
   }
}


void imprime (char matriz[F][C])
{
   erase();
   int i,j;
   
   
   
   for(i=0;i<(C+2);i++){printw("_  ");}/*arriba*/
   printw("\n");
   for (i=0;i<F;i++)
   {
      printw("|");/*izquierda*/
      for (j=0;j<C;j++)
      {
         printw("%c  ",matriz[j]);
      }
      
      printw(" |\n");/*derecha*/
   }
   for(i=0;i<(C+2);i++){printw("_  ");}/*abajo*/
   printw("\n");
   
   printw("%d  \n",contador);
}

void comida()
{
   
   a=(rand() % F);      /*parentesis para ver si para de salirse*/
   b=(rand() % C);
   
   fondo[a]='@';
   imprime(fondo);
}
En línea

ssaammuu

Desconectado Desconectado

Mensajes: 35



Ver Perfil WWW
Re: AYUDA!! kbhit() en linux
« Respuesta #9 en: 6 Abril 2011, 00:42 am »

De linux yo se bien poco, pero por lo que tengo entendido getch() no existe ya que esta definido en conio.h, esto explicaria el error. Asi que tienes que definir tu propia funcion getch(), por lo que he leido seria algo asi

Código:
int mygetch( ) {
  struct termios oldt,
                 newt;
  int            ch;
  tcgetattr( STDIN_FILENO, &oldt );
  newt = oldt;
  newt.c_lflag &= ~( ICANON | ECHO );
  tcsetattr( STDIN_FILENO, TCSANOW, &newt );
  ch = getchar();
  tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
  return ch;
}

(http://cboard.cprogramming.com/faq-board/27714-faq-there-getch-conio-equivalent-linux-unix.html)
« Última modificación: 6 Abril 2011, 00:44 am por ssaammuu » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda T_T alguien sabe como usar la funcion "kbhit()"?
Programación C/C++
Ai Toi 2 11,673 Último mensaje 19 Julio 2015, 17:07 pm
por Nico01
ayuda con kbhit()
Programación C/C++
0xDani 3 4,779 Último mensaje 19 Mayo 2012, 21:33 pm
por RyogiShiki
ayuda: kbhit() en iterador en c++
Programación C/C++
Nico01 6 3,566 Último mensaje 19 Julio 2015, 16:58 pm
por Nico01
funciones similares a kbhit y getch en c++ gnu/linux
Programación C/C++
etcheverrypablol 9 7,371 Último mensaje 18 Enero 2016, 19:09 pm
por etcheverrypablol
Función kbhit() y getch()
Programación C/C++
jmhr98 0 1,999 Último mensaje 13 Agosto 2018, 16:12 pm
por jmhr98
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines