| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Lano
Registrado: 21 Dic 2012 Mensajes: 3
| Publicado: 21/12/2012 1:00 pm | | | Título: Scanf por un tiempo determinado |
| Hola a todos, la verdad soy nuevo pero me pasé buscando información sobre como hacerlo y me he dado cuenta que aquí ayudan a los noobsters como yo =P espero no causar problemas y gracias por la ayuda de antemano.
Mi duda aqui es: Como podría dejar activo un scanf por un periodo de tiempo? Amm como ejemplo que tengas 2 segundos para ingresar los datos, lo que pasa es que me gustaría para un mini-videojuego.
Ahorita lo estoy programando (en C -EDITADO PERDÓN D=) en windows pero si saben en ubuntu creo no tendría problema alguno =P
Gracias 
Ultima edición por Lano el 21/12/2012 1:21 pm; editado 1 vez |
| | Volver arriba | |  | Masakre
Registrado: 06 Jun 2012 Mensajes: 245
| Publicado: 21/12/2012 1:16 pm | | | Título: |
| No sé si te refieras a esto, pero quizás te sea de ayuda 
| Código: | #include <iostream> #include <conio.h> using namespace std; void hacerAlgo(char);
int main() { char x; cout<<"Leyendo caracteres !"<<endl; // Mientras sea diferente de E (exit). while( (x=getche()) != 'E' ) hacerAlgo(x); cout<<"\nSe detuvo el proceso porque presionaste E (exit)."; return 0; }
void hacerAlgo(char c){ cout<<"\tHas presionado "<<c<<" !"<<endl; } |
La función getche() de la librería conio.h lee un caracter inmediatamente (en cuanto se presiona una tecla por teclado), es decir, sin la necesidad de presionar <ENTER>. |
| | Volver arriba | |  | Lano
Registrado: 21 Dic 2012 Mensajes: 3
| Publicado: 21/12/2012 1:29 pm | | | Título: |
| Perdon D=, no me di cuenta que no puse en el lenguaje que lo estaba programando (lo estoy haciendo en C) Gracias masakre por pasarte a leer mi pregunta ^^ Pues lo poco que entiendo de c++ y a tu explicación entiendo lo que respondiste lo que hace el código es leer el caracter, evaluar hasta que presionen la E para así salirse pero no, eso no es lo que necesito.
Estoy haciendo un juego del topo, en un tablero sale un asterisco -representando al topo- y el usuario debe ingresar la ubicación del topo -en el tablero- para pegarle pero pues a como lo tengo me fijé que el scanf se detiene hasta que el usuario ingrese la ubicación para golpear al topo, y lo que yo quiero es que el scanf se detenga tanto tiempo, o sea, si el usuario no ingresa las coordenadas en 1 segundo, se reinicie el ciclo y la ubicación del topo sea diferente.
PD.- Espero no haber cantinfleado PD2.- Si es necesario, les puedo pasar el código, solo llego a mi casa y lo subo
Ultima edición por Lano el 21/12/2012 1:31 pm; editado 1 vez |
| | Volver arriba | |  | | Masakre
Registrado: 06 Jun 2012 Mensajes: 245
| Publicado: 21/12/2012 2:04 pm | | | Título: |
| Pues, no hay mucha diferencia entre C y C++, o por lo menos en este tipo de casos.
En base a la información expuesta en este enlace:
| Cita: | | http://foro.elhacker.net/programacion_general/mod_control_del_tiempo_en_c-t23753.0.html |
He adecuado el código anterior:
| Código: | #include <iostream> #include <conio.h> // Para usar getche() #include <time.h> // Para usar clock(); #include <cstdlib> // Para usar system(); using namespace std; void hacerAlgo(char);
int main() { char x; clock_t ini=0, fin=0; cout<<"Leyendo caracteres !"<<endl; do{ ini = clock(); // Inicia conteo. x=getche(); fin = clock(); // Finaliza conteo. if(fin-ini > 5*1000){ // Por ser MILISEGUNDOS. cout<<"\n\n\tPerdiste! Excediste el limite de tiempo!\n"; system("pause>nul"); return 0; } hacerAlgo(x); }while(x != 'E'); cout<<"\nSe detuvo el proceso porque presionaste E (exit)."; return 0; }
void hacerAlgo(char c){ cout<<"\tHas presionado "<<c<<" !"<<endl; }
|
Bueno, según lo que se indica en el enlace:
| Cita: | | clock() retorna el tiempo transcurrido desde el encendido del ordenador. |
Por eso se usa (fin - ini > 5 * 1000); es decir, si el tiempo que le tomó al usuario ingresar un caracter es mayor que 5 segundos, muestra el dichoso mensaje y finaliza el programa.
Creo que lo puedes adecuar a lo que buscas  |
| | Volver arriba | |  | Masakre
Registrado: 06 Jun 2012 Mensajes: 245
| Publicado: 21/12/2012 2:18 pm | | | Título: |
| Por cierto, sería bueno que uses dibujos ASCII en tu programa. Así, a pesar de que aún no pasemos de consola, demostramos que pueden hacerse cosas graciosas:
| Código: | _____ \"_ _"/ |(>)-(<)| ../ " O " \.. sjw----""(((:-.,_,.-:)))""-------- |
| Cita: | | http://ascii.co.uk/art/mole |
Saludos. |
| | Volver arriba | |  | Lano
Registrado: 21 Dic 2012 Mensajes: 3
| Publicado: 21/12/2012 3:22 pm | | | Título: |
| | Masakre escribió: | Por cierto, sería bueno que uses dibujos ASCII en tu programa. Así, a pesar de que aún no pasemos de consola, demostramos que pueden hacerse cosas graciosas:
| Código: | _____ \"_ _"/ |(>)-(<)| ../ " O " \.. sjw----""(((:-.,_,.-:)))""-------- |
| Cita: | | http://ascii.co.uk/art/mole |
Saludos. |
Ohh intentaré implementar lo del tiempo al programa ya sería un comienzo Aquí mi código:
| Código: | #include <stdio.h> #include <stdlib.h> #include <windows.h>
int imptab(int x, int y);
int main(){ int xpos, ypos,x,y,i, vic,j; char cont; do{ vic = 0; for(i = 0; i < 5; i++){ xpos = rand()%3; ypos = rand()%5; system("cls"); if(ypos == 1 || ypos == 3) ypos++; printf("Topos Golpeados: %d\n",vic ); imptab(xpos,ypos); printf("Ingresa la ubicación [X | Y]: "); scanf("%d %d",&x,&y); x--; if (y < 3) y--; if(y == 1 || y == 3) y++; if(xpos == x && ypos == y){ printf("Le diste al topo\n"); Sleep(600); vic++; } else{ printf("No le diste al topo U_U\n"); Sleep(600); } } printf("Has finalizado el juego\nDeseas continuar empezar otro juego? [S/N]: "); scanf("%*c%c",&cont); }while(cont == 'S' || cont =='s'); return 0; }
int imptab(int x, int y){ int i,j; for(i = 0; i < 3; i++){ printf("\t\t\t\t"); for(j = 0; j < 5; j++){ if(i == x && j == y) printf("*"); else{ if(j == 1 || j == 3) printf("|"); else printf("_"); } } printf("\n"); } return 0; }
|
Igual te invito a que lo compiles para que así veas que no tiene dificultad por eso del tiempo T_T xD
Para poner los dibujitos de ASCII es buena idea, pero pues tengo que hacer la tabla más grande o como sería el código? D= todo lo pongo en un arreglo bidimensional =P |
| | Volver arriba | |  | | rir3760

Registrado: 01 Oct 2004 Mensajes: 7530 Ubicación: Mexico
| Publicado: 21/12/2012 6:42 pm | | | Título: |
| | Lano escribió: | | Mi duda aqui es: Como podría dejar activo un scanf por un periodo de tiempo? |
No es posible.
Si apenas empiezas tu estudio del lenguaje C es mejor que dejes ese tipo de operaciones para después ya que requieren del uso de extensiones, por ejemplo el API del sistema operativo.
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |