SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Murciego en Martes 1 de Octubre de 2002, 11:47

Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Murciego en Martes 1 de Octubre de 2002, 11:47
¿Como podría saber si una tecla esta pulsada o no?

Es para intentar hacer un jueguecito, y asi, por ejemplo, hacer que si la z esta pulsada, se mueva el muñeco hacia la izquierda, y si esta la c pulsada, a la derecha etc....

Me gustaría hacerlo en c++,  sin usar funciones de windows.

Por favor, mandarme también un e-mail con la respuesta a j_murciego@hotmail.com

Gracias
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: kenshin en Sábado 19 de Octubre de 2002, 11:06
Hola:)

Espero que esto te sirva de ayuda:
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Murciego en Jueves 24 de Octubre de 2002, 13:05
Muchas gracias por la información
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Arleko en Lunes 11 de Noviembre de 2002, 06:42
Esta exelente la respuesta de kenshin, pero te doy un consejo personal y mas facil, mira :o:

primero captura la tecla pulsada en una variable tipo char, despues la comparas con la tecla de tu preferencia en su valor ascii,,, ejemplo:

Sabes que ESC su valor es 27.

bueno puedes hacer un ciclo mientras que no se pulse ESC de la siguiente manera.

void funcion()
{
char tecla;
//Aqui ponemos el ciclo
do{
tecla=getch();//Esperamos que se pulse la tecla
}while(tecla!=27)//27 es su valor de ESC en ASCII

Bueno espero te ayude un poco, nos vemos

Tu amigo:
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Murciego en Miércoles 20 de Noviembre de 2002, 12:47
Hola de nuevo

No he conseguido compilar el codigo que me manda kenshin. Lo he copiado tal cual añadiendo las variables tecla[] y definiendo SI y No, pero al ir a compilar me da un error estraño.

Estoy usando Turbo C 1.01

No se nada de ensamblador ni de las interrupciones. ¿Alguien a conseguido que funcione? Me gustaría conseguir un fragmento de codigo que funcione y donde solo tenga que mirar a la tecla[].

Muchas gracias

Por cierto, si a alguien le interesa el codigo del minijuego que estoy haciendo se lo paso sin ningun problema. Es parecido al tetris pero disparando a las piezas.

Mi e-mail es j_murciego@hotmail.com
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Arleko en Lunes 25 de Noviembre de 2002, 00:32
Pasame el codigo deel minijuego,,, para ver que aprendo...:D
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Murciego en Miércoles 27 de Noviembre de 2002, 14:17
Aun no esta acabado, me falta lo del teclado y hacer el algoritmo para que la máquina juegue y algun detallin sin importacia.

Si quieres te lo puedo pasar asi, o cuando lo termine

Un saludo
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: wimogan en Jueves 28 de Noviembre de 2002, 20:54
Hola:

Ok, si realmente quieres que al mantener una tecla pulsada el muñeco o lo que sea se mueva a la izquierda, te recomiendo que utilices "getch", que lo puedes encontrar en la "conio.h" si usas windows o en la "curses.h", "ncurses.h",(me parece que existe otra libreria que no recuerdo cual), si utilizas linux.

Suporngo que para moverte utilizarias "gotoxy" de la "conio.h" si trabajas en windows.

Para linux podrias usar "move", "wmove", "otras", de la "curses.h" y "ncurses.h".

Ah, en Linux ,que yo sepa, no existe ninguna libreria que tenga definido el "gotoxy". Pero lo puedes usar sin necesidad de ninguna libreria, mediante la directiva o instruccion:

#define gotoxy(x,y);printf("33[%d;%df",x,y);

Un ejemplo de forma rapida podria ser:

Para linux:

#include <stdio.h>
#include <ncurses.h>
#define KEY_ESC '33'

main ()
{

     int c,x=1,y=1;

     initscr();     //Inicializo Ncurses.
     keypad(stdscr,TRUE);    //Permito el mapeo de las teclas de funciones en la pantalla.
     
     while ((c=getch())==KEY_RIGHT)    //Leo la tecla presionada.
      {
           mvprintw(x,y,"A");   //Me muevo a las coordenadas (x,y) e imprime la letra "A". (En tu caso el muñeco o lo que sea).
           
          if (y<=10) y=y+1;   //Aumenta las columnas.
          else {x=x+1;y=1;printw("n");}   //Aumenta la fila, hace la columna 1 y baja a una nueva linea.
      }
      refresh();   //Refresco de pantalla para sacar los caracteres.
      endwin();   //Finalizar Ncurses.

}

Lo compilas:  gcc -o nombre nombre.c -l ncurses

Bueno, espero haberte respondido.

Un saludo y cualquier cosa avisas.
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Murciego en Jueves 28 de Noviembre de 2002, 22:59
Hola wimogan

El problema de la solución que me dices es que si poner getch(), el sistema se para hasta que se pulse una tecla, y eso no es lo que yo quiero.

Lo que yo quiero es saber que teclas estan pulsadas y que teclas no,y no esperar a que se pulse una tecla. No se si me explico bien.

La solución dada por kenshin es la ideal, si la pudiera hacer funcionar. Alli se tiene una matriz teclado[] que se actualiza cuando se lo dices y que te dice si la tecla i esta presionada o no lo esta.


Otra solución que he visto por el codigo de algunos juegos, es usar la función kb??? pongo ? porque no me acuerdo el nombre exacto, que devuelve 0 o 1 dependiendo de si hay alguna tecla pulsada. Entonces si hay una tecla pulsada se usa getche() para obtenerla. Pero el problema es...¿que pasa si hay tres teclas presionadas a la vez?

La solución es hacer funcionar el programilla que viene en teclado.doc de kenshin, pero ese tipo de programa a mi se me escapa. No entiendo bien lo que hace.

Si alguien es capaz de hacerlo funcionar se lo agradecería mucho.

Un saludo y gracias a todos


Javier Murciego
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: wimogan en Jueves 28 de Noviembre de 2002, 23:56
Ok, en ese caso no tengo una solucion inmediata a tu problema, pero tal vez prodria ayudarte diciendote que la funcion que empieza con "kb" que dices que se te olvido, posiblemente sea la "kbhit" de la "conio.h" para windows, y con respecto a la solucion de kenshin, voy a tratar de interpretarla a ver si la entiendo y te puedo ayudar.

Dicen que dos cabezas pienzan mejor que una!.

Pero bueno, aun asi, trata de ver si la funcion "kbhit" te puede ayudar en lo que el hacha va y viene.

Mientras tanto, suerte.
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Arleko en Lunes 2 de Diciembre de 2002, 20:49
Hola Murcielago,,, si, asi pasamelo,,, a ver si yo lo acabo,,,,

miren
para las teclas pulsadas hagan lo siguiente


char op;

op=getch();

switch(op)
    {
       case /*(Aqui ira el codigo hexadecimal)*/:
/*
                      lo que quieren que haga al                   pulsar la tecla;
*/
break;

    }



/***************************/
//y para saber el codigo hexadecimal de una tecla haz lo siguiente:


char tecla;

tecla=getch();

printf("Tecla: %c,,, ASCII: &d,,,,Hexadecimal 0x%x00",tecla,tecla,tecla);

getch();



y me cae que si les funciona:o
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Avalon en Lunes 2 de Diciembre de 2002, 21:48
Hola Murciego,

Echale un vistazo a este código, a ver si te sirve:

http://mundovb.net/mundoc/pelota.htm (http://mundovb.net/mundoc/pelota.htm)

Salu2,
Avalon
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Murciego en Lunes 2 de Diciembre de 2002, 22:34
Gracias Avalon

Ya había mirado ese codigo y me resulto muy util. Gracias de todas formas.

Un saludo
Título: Re: ¿Como saber si na tecla esta pulsada?
Publicado por: Satyr en Lunes 20 de Enero de 2003, 03:23
puedes hacerlo de las siguiente manera

main()
{
char c;

do{
if(kbhit())
  {
  clrscr();  
  c=getch();
   printf("%c  =  %d",c,c);
  }
}while(c!=27);
}
Título: ¿Como saber si na tecla esta pulsada?
Publicado por: galator en Martes 21 de Enero de 2003, 17:55
porque no pruebas con esto
main()
{
char tecla;

do
{
 ......

if(kbhit())
{
tecla=getch();
case .....
....
}

}while(tecla!=27);
}