• Sábado 14 de Diciembre de 2024, 14:42

Autor Tema:  Re: ¿Como saber si na tecla esta pulsada?  (Leído 7624 veces)

Murciego

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
    • http://es.geocities.com/mclosbirrias
Re: ¿Como saber si na tecla esta pulsada?
« en: Martes 1 de Octubre de 2002, 11:47 »
0
¿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

kenshin

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #1 en: Sábado 19 de Octubre de 2002, 11:06 »
0
Hola:)

Espero que esto te sirva de ayuda:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Murciego

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
    • http://es.geocities.com/mclosbirrias
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #2 en: Jueves 24 de Octubre de 2002, 13:05 »
0
Muchas gracias por la información

Arleko

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
    • http://www.mundoarleko.vze.com
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #3 en: Lunes 11 de Noviembre de 2002, 06:42 »
0
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:

Murciego

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
    • http://es.geocities.com/mclosbirrias
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #4 en: Miércoles 20 de Noviembre de 2002, 12:47 »
0
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

Arleko

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
    • http://www.mundoarleko.vze.com
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #5 en: Lunes 25 de Noviembre de 2002, 00:32 »
0
Pasame el codigo deel minijuego,,, para ver que aprendo...:D

Murciego

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
    • http://es.geocities.com/mclosbirrias
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #6 en: Miércoles 27 de Noviembre de 2002, 14:17 »
0
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

wimogan

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #7 en: Jueves 28 de Noviembre de 2002, 20:54 »
0
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.

Murciego

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
    • http://es.geocities.com/mclosbirrias
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #8 en: Jueves 28 de Noviembre de 2002, 22:59 »
0
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

wimogan

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #9 en: Jueves 28 de Noviembre de 2002, 23:56 »
0
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.

Arleko

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
    • http://www.mundoarleko.vze.com
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #10 en: Lunes 2 de Diciembre de 2002, 20:49 »
0
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

Avalon

  • Miembro MUY activo
  • ***
  • Mensajes: 448
    • Ver Perfil
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #11 en: Lunes 2 de Diciembre de 2002, 21:48 »
0
Hola Murciego,

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

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

Salu2,
Avalon

Murciego

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
    • http://es.geocities.com/mclosbirrias
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #12 en: Lunes 2 de Diciembre de 2002, 22:34 »
0
Gracias Avalon

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

Un saludo

Satyr

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: ¿Como saber si na tecla esta pulsada?
« Respuesta #13 en: Lunes 20 de Enero de 2003, 03:23 »
0
puedes hacerlo de las siguiente manera

main()
{
char c;

do{
if(kbhit())
  {
  clrscr();  
  c=getch();
   printf("%c  =  %d",c,c);
  }
}while(c!=27);
}

galator

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
¿Como saber si na tecla esta pulsada?
« Respuesta #14 en: Martes 21 de Enero de 2003, 17:55 »
0
porque no pruebas con esto
main()
{
char tecla;

do
{
 ......

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

}while(tecla!=27);
}