SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Twinsen en Viernes 26 de Mayo de 2006, 05:54

Título: Una Función Que Lea Por Letra
Publicado por: Twinsen en Viernes 26 de Mayo de 2006, 05:54
Hola.

Cuando usaba turbo c, hice un juego. El tipico del gusanito para el celular. en modo consola y en la libreria graphics.h

La cosa, es que quiero hacer un arkanoid ahora. Pero me pase a dev-c++ y claro, eso es trabajar en modo consola.

PERO el problema que tengo. es que la función que usaba en turbo c no lo lee el dev-c [Usaba algo como c=getch();]

Ahora. si uso getchar, cin o lo que sea. el pc queda esperando a que presione la tecla "enter".

Y lo que yo quiero es al que, presionar cualquier tecla, el programa haga algo y si no se apreta .. no haga nada. pero no que espere la tecla enter.

Existe alguna función que haga esto ??. Muchas Gracias
Título: Re: Una Función Que Lea Por Letra
Publicado por: angel_aprendiz en Martes 30 de Mayo de 2006, 04:53
hola¡

la verdad no entendi muy bein lo que quieres hacer, pero segun la funcion que buscas creo que es getch(); esta funcion lee un caracter y no espera el retorno del carro, ni tampoco causa eco. el getche(); lee un  caracter con eco, y no espera el retorno del carro :comp:
Título: Re: Una Función Que Lea Por Letra
Publicado por: x.cyclop en Martes 30 de Mayo de 2006, 17:27
¿Será scanf()? :blink:
Título: Re: Una Función Que Lea Por Letra
Publicado por: Geo en Martes 30 de Mayo de 2006, 23:59
La función que menciona angel_aprendiz es la que buscas, está en la biblioteca conio:

http://c.conclase.net/Borland/funcion.php?fun=getch (http://c.conclase.net/Borland/funcion.php?fun=getch)

Este tipo de funciones es las que más se extrañan de conio, afortunadamente esta función si está disponible en la implementación de MinGW (el compilador que se usa normalmente con Dev-C++).

Saludos,
José Jorge (Geo).
Título: Re: Una Función Que Lea Por Letra
Publicado por: Masiosare en Miércoles 31 de Mayo de 2006, 06:19
El compilador de C que viene con el Dev-C++ no viene con la librería <conio.h>. Puedes ir a actualizaciones escoger el espejo "devpaks.org" y buscar la una librería que escribieron para este compilador creo que también se llama conio. O puedes bajar la librería de aquí (http://www.devpaks.org/details.php?devpak=16) e instalarla, y listo. Al parecer no es el mismo que la librería para borland pero tiene las funciones getch(), getche(), y kbhit() (que creo que son las que necesitas) entre otras.

      Suerte  :)
Título: Re: Una Función Que Lea Por Letra
Publicado por: Twinsen en Jueves 1 de Junio de 2006, 02:40
Gracias. pero scanf() no funciona.

Mi idea de pasarme a Dev c++ es usar 100% su funcionalidad .. no exportar librerias viejas .. o sea, usar el standard ...

Les pego la parte del codigo ke creo, usaba en turbo c y les explico la funcionalidad.

do
{
    c=getch();
    cout<<"Cualquier cosa";
}
while ( c==algo)

Lo que quiero hacer es que el programa NO SE DETENGA cuando se presione una tecla. sino que guarde el valor en una variable. y que funcione a cada rato.

Por ejemplo .. lo que cualquiera pensaria es que el programa espere que aprete una tecla, luego diria "Cualquier Cosa" y luego esperaria una tecla .... lo que yo quiero es que salga sin parar "Cualquiero cosa", pero que al apretar una tecla se guarde en la variable C el codigo ascii.

O mas facil. imaginense al gusano moviendose indefinidamente ... y si nadie apreta una tecla va a chocar contra la pared.. y si apreta una tecla equivocada no va a reaccionar y chocara contra la pared igual. solo reacciona cuando apreto esc o las teclas de movimiento... Espero se haya entendido un poco mas mi idea, que de verdad no se como explicarla bien

En mi codigo (Lo voy a buscar. debo de tenerlo en un respaldo por ahi. lo hice con la libreria graphics.h xD) el gusanito se movia derecho solo hasta que alguien apreta una tecla. y hacia algo si era la a,s,w o d o si apretaba la tecla Enter...

TIENE que haber una forma de hacerlo. Con la libreria Conio (Insisto. no la quiero usar, quiero usar la standard) lo hacia facil. no era la mejor movilidad, pero funcionaba. No lo alcanze a optimizar.

Espero se haya entendido un poco mejor lo que busco hacer.. Gracias por su ayuda !!
Título: Re: Una Función Que Lea Por Letra
Publicado por: tonilope en Martes 6 de Junio de 2006, 04:59
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;windows.h&#62;
  5.  
  6. char lee_caracter();
  7.  
  8. int main(int argc, char **argv)
  9. {
  10.  
  11. char opcion;
  12.  
  13. printf(&#34;&#092;nPulsa una tecla:&#092;n&#092;n&#34;);
  14.  
  15. while(opcion!=13)
  16.     {
  17.     opcion=lee_caracter();
  18.     printf(&#34;&#092;nHas pulsado -&#62; %c &#092;n&#34;, opcion);
  19.     }
  20.  
  21. return 0;
  22.  
  23. }
  24.  
  25. char lee_caracter()
  26. {
  27.    int car;
  28.    DWORD leidos, modo;
  29.    
  30.    GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &modo);  
  31.    SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo & !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT);
  32.    ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &car, 1, &leidos, NULL);
  33.    SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo);  
  34.    return (char)car;
  35. }
  36.  
  37.  

Salu2 ;)
Título: Re: Una Función Que Lea Por Letra
Publicado por: Geo en Martes 6 de Junio de 2006, 06:11
Cita de: "Twinsen"
Mi idea de pasarme a Dev c++ es usar 100% su funcionalidad .. no exportar librerias viejas .. o sea, usar el standard ...
No hay una función estándar que tenga el comportamiento que deseas.
Nota: Dev-C++ es el IDE, el compilador es MinGW (http://www.mingw.org).

Tendrás que usar alguna de estas:
Saludos,
JJ (Geo).