Errores comunes en Wherigos con Urwigo I

Publicado el Jueves, 05 Marzo 2015 Escrito por mitesoro

PerplejoUno de los errores más frecuentes cuando se programan cartuchos de Wherigo es el hecho de que en determinados momentos del juego, tendremos dos hilos de programa corriendo simultáneamente y no es fácil ver  a priori cual de los dos hilos en los que se ha dividido el programa se va a ejecutar primero. Esto se debe a que en el lenguaje Lua se pueden ejecutar varios hilos de programa simultáneamente. Esto permite mejorar la eficiencia de los programas, pero complica la vida al programador si no tiene claro como funciona esto.

 

 

 

Veamos esto con un ejemplo: 

Ejemplo1

Si escribimos y ejecutamos el siguiente trozo de código veremos que se produce un hecho extraño. Cuando entramos en nuestra rutina, ponemos la variable huevos a 2. Después hacemos la pregunta al jugador de "Cuantos huevos tienes?" y cuando el jugador pulsa OK le mostramos los huevos que tiene. Después cambiamos el valor de la variable huevos a cuatro. Y ahora viene la pregunta del millón. Antes de ejecutar el programa, ¿cuál creéis que va a ser  la respuesta?. La mayoría pensará que la respuesta es 2, pero si corréis el programa veréis que la respuesta correcta es cuatro.

Vamos a intentar analizar qué es lo que está ocurriendo. Lo que hace el programa es que cuando llega al primer mensaje "Cuantos huevos tienes?" la ejecución del programa se divide en dos hilos, uno que se queda esperando a que el usuario pulse OK y otro hilo que continua ejecutándose hasta terminar. Visto de otra manera la ejecución del programa se parece más a:

Ejemplo2

Como podemos ver hay dos hilos, uno que se ejecuta inmediatamente poniendo la variable huevos a cuatro y un segundo hilo a la espera del usuario y que cuando se ejecuta se encuentra que huevos ya ha sido modificado al valor 4.

Vamos a verlo con otro ejemplo:

Ejemplo2

 

En este caso tenemos un código que en principio pone huevos a 2 luego nos pregunta cuantos huevos tienes? y nos muestra cuantos son. Como ya comentamos en el apartado anterior, en principio parece que la respuesta es 2, pero cuando lo ejecutamos veremos que la respuesta es 4 porque se ejecuta primero el hilo que no espera la respuesta del jugador. Después de esto, se pone la variable a 2 y termina la ejecución. Ahora creamos un evento al entrar en una zona a la cual nos dirigiremos después de haber pasado por la rutina anterior. El código es:

Ejemplo4

Ahora al entrar en la zona nos muestra un mensaje con los huevos que tenemos, ¿Cual creéis que va a ser la respuesta?. Si vemos las sentencias que se han ejecutado antes de entrar, podríamos pensar que la respuesta es cuatro, a la vista de que la última instrucción que hemos colocado es Huevos=4, pero como ya hemos comentado, lo último que se ejecuta son la instrucciones incluidas dentro del evento On clicked y por tanto cuando salimos de la rutina On Start el valor de huevos es dos. Podemos comprobarlo entrando a la zona que hemos creado y viendo que el mensaje es "Tienes:2" .

Es importante tener en cuenta lo comentado en este artículo, puesto que si nuestro programa ha crecido mucho perderemos estos detalles de vista y nos dará la sensación de que las variables toman los valores que les da la gana y de que las cosas no funcionan. 

Un consejo importante, si no lo tienes claro, es que pongas todas las sentencia hasta terminar la rutina dentro del evento On clicked de esta manera tendremos un único hilo de ejecución que hace que sea más sencillo tener unos resultados predecibles. 

TIP: Puedes hacer zoom de la pantalla utilizando la tecla CTRL y la rueda central del ratón. Con esto conseguirás que todas las cajitas de un programa te quepan en una sola pantalla y poder moverte por ellas.

 

 

Comentarios   

#2 mitesoro 08-03-2015 18:11
Ya sabéis que os podemos echar una mano para lo que sea menester.
#1 iGambusinos 05-03-2015 22:11
Ay el Urwigo! Vaya batallas tenemos con él!  :lol:

Para comentar necesitas estar registrado.