Cuestion Y Tiempo


Objetivo: Cuestion Y Tiempo
Hola!.

Tengo que mejorar el titulo y la descripción de este mensaje.

Quería usar el comando input y timer en un ejemplo de consola.
Pero me dio problemas. Timer no hace nada hasta que se escribe algo.
La idea era que si se tardaba en responder mas de la cuenta, de alguna manera la aplicación avisa.

Es lo mas parecido a los concursos. Cuando te pasas de tiempo en responder.

Hice dos ejemplos parecidos. Se nota una programación distinta.

Este es el primero con un input. Una vez escrito se comprueba el tiempo que ha tardado
y avisa si el tiempo fue mayor del deseado. Pero no se temporiza mientras no se escribe nada.

Public Sub Comprueba_Tiempo()
Dim nombre As String
Dim hora_al_inicio As Date
Dim hora_al_final As Date
Dim segundos As Integer

Print "Ingrese su nombre: "
hora_al_inicio = Time(Now)
Do While Not nombre
Input nombre 'Cualquier texto
Loop
hora_al_final = Time(Now)
segundos = Abs(DateDiff(hora_al_final, hora_al_inicio, gb.Second))

If segundos > 10 Then
Print "Ha tardado demasiado en escribir su nombre"
Else
Print "Ha tardado en escribir su nombre en : " & segundos & " segundos"
Endif
End


Ahora el ejemplo con un formulario. Es distinto. Se controla mejor. Aquí si va mejor Timer.

Private ha_escrito_algo As Boolean
Private contador As Integer

Public Sub _new()

End

Public Sub Form_Open()

Timer1.Delay = 1000
Timer1.Start

End

Public Sub Timer1_Timer()

If ha_escrito_algo Then
Print "Ha ingresado un nombre"
Print "Ha tardado en escribirlo: " & contador & " segundos"
Timer1.Stop
Else If contador >= 10 Then
Print "Ha tardado más de diez segundos en escribirlo"
Timer1.Stop
Else If contador < 10 Then
contador += 1
Endif

End

Public Sub txtNombre_KeyPress()

If Key.Code = Key.Return Then ha_escrito_algo = True

End


No se si en consola esto tendrá solución.

Imaginar los interpretes de basic antiguo. Una linea de comando que esta esperando a que escribas algo y no se hace.
La aplicación no acabaría nunca


Saludos

última edición por Shell el Martes, 24 Diciembre 2013, 19:34; editado 1 vez
Objetivo: Re: Cuestion Y Tiempo
No he entendido absolutamente nada, pero Feliz Navidad, shell!

Perfil MP  
Objetivo: Re: Cuestion Y Tiempo
jajaja.

Vale, me explico de otra forma. Imagina que estas esperando una respuesta de alguien y el tiempo
que tiene en responder es limitado.

Lo que me interesa es que en modo consola cuando el usuario entra algo mediante input,
tenga un tiempo limitado para escribir algo. Pero en modo consola, no con formularios.

Estos dos ejemplos son distintos, el primero que hice en modo consola usaba input y timer,
pero no funcionaba como yo quería. Lo busco y lo subo para que veas el comportamiento que hace.

En estos ejemplos distintos, en el que es con formulario se cumple lo que quiero.
Solo es cuestión de arrancar el timer al principio y comprobar que el usuario ha pulsado la tecla Enter o Return.
Si lo hace antes de tiempo, muestra el tiempo que ha necesitado en escribir algo.
Escriba o no escriba algo el usuario, el timer es independiente y va avisar de que se ha pasado el usuario o no en tiempo.

En el modo consola, casi es lo que quiero. Solo que se hace la comprobación al final, cuando el usuario ya ha escrito algo.
No hay nada que limite el tiempo de escritura del usuario en este ejemplo de consola.

Entonces, como en el ejemplo de consola, la aplicación se ejecuta una instrucción tras otra, no
se pueda hacer algo que si se puede hacer en la programación dirigida por eventos.

Espero haberme explicado mejor, esta vez.

Feliz navidad Jesús.

Objetivo: Re: Cuestion Y Tiempo
Ejemplo 1.

Imagino que vais a decir. ¿ Como es que no salta a la instrucción del Timer y va y ejecuta el Input ?.
Y hasta que Input no se ejecuta, no comienza Timer. Podéis probar ejecutando con F8.

( Visto de alguna manera si salta a Reloj_Timer, nunca se ejecutaría print e input )

- Si se escribes algo, te dirá que es un segundo.
- Si no escribes nada, no se ejecuta Timer.
- Si das a intro y esperas, al rato te dirá que se ha excedido el tiempo.


Private temporizador As Timer
Private cuenta_tiempo As Integer
Private ha_escrito_algo As String

Public Sub Main()

temporizador = New Timer As "Reloj"
temporizador.Delay = 1000
temporizador.Start

Print "Escriba algo"
Input ha_escrito_algo

End

Public Sub Reloj_Timer()

cuenta_tiempo += 1
If cuenta_tiempo >= 10 And Not ha_escrito_algo Then
Print "Limite de tiempo excedido"
temporizador.Stop
Else If cuenta_tiempo < 10 And ha_escrito_algo Then
Print "Ha necesitado " & cuenta_tiempo & " segundos. Para escribir: " & ha_escrito_algo
temporizador.Stop
Endif

End


Entonces digo yo. Y si añado el input en el timer.
Veremos...

No descanso ni en navidades. ¿ Sera vicio ?.

Saludos

Objetivo: Re: Cuestion Y Tiempo
No puedo añadir input en el timer, se pararía todo....

Objetivo: Re: Cuestion Y Tiempo
Shell:

En el basic antiguo existia una funcion llamada INKEY$, que lo que hacia era leer el teclado y devolver la letra pulsada. La metias en un bucle while y ibas recibiendo todas las letras pulsadas hasta que se cumpliera una condicion.

Se usaba mucho en el tema de programar juegos.

En gambas no la he visto, pero supongo que se podria implementar con una funcion externa en C, usando getch().

Saludos

Objetivo: Re: Cuestion Y Tiempo
Julio:

INKEY$ era solo para una tecla. Cierto. jeje, WHILE. Mas bien digamos un GO TO. GOSUB,RETURN.
A lo mas teníamos teníamos el bucle FOR. Eso en Spectrum Sinclair.

Sin llegar a código maquina esto se tenia que hacer de alguna forma.
A ver si encuentro algún juego antiguo hecho en basic con esta idea.

Saludos


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4145s (PHP: -69% SQL: 169%)
Consultas SQL: 46 - Debug off - GZIP Activado