SoloCodigo
Programación General => C/C++ => Mensaje iniciado 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
-
Hola:)
Espero que esto te sirva de ayuda:
-
Muchas gracias por la información
-
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:
-
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
-
Pasame el codigo deel minijuego,,, para ver que aprendo...:D
-
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
-
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.
-
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
-
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.
-
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
-
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
-
Gracias Avalon
Ya había mirado ese codigo y me resulto muy util. Gracias de todas formas.
Un saludo
-
puedes hacerlo de las siguiente manera
main()
{
char c;
do{
if(kbhit())
{
clrscr();
c=getch();
printf("%c = %d",c,c);
}
}while(c!=27);
}
-
porque no pruebas con esto
main()
{
char tecla;
do
{
......
if(kbhit())
{
tecla=getch();
case .....
....
}
}while(tecla!=27);
}