Crea tu propio Wherigo (9) FUNCTIONS y ACTIONS

Esta entrada forma parte del curso “Crea tu propio Wherigo”: Pincha en los siguientes enlaces para ver las entregas anteriores del mismo:

1: EL RETO

2: COMENZANDO NUESTRO CARTUCHO

3: GRÁFICOS Y AUDIO: LOS MEDIA

4: DE ZONA EN ZONA y tiro porque me toca

5: PERSONAJES Y OBJETOS… dialogando con unos y cogiendo a los otros

6: TASK Y VARIABLES… Vamos avanzando

7: INPUTS… ¡Comienza la diversión con la Action If/Else!

8: TIMERS… Carreras contrarreloj!!!

……………………..

Wherigo es una marca registrada.

Antes de nada recomiendo encarecidamente leer las guidelines oficiales, así como la sección de preguntas frecuentes para tener claro que podemos y que no podemos hacer a la hora de crear y publicar un caché Wherigo.

………………………

Tras el paréntesis de agosto volvemos al tutorial “Crea tu propio Wherigo“, que entra ya en su recta final. En esta entrega se explicará brevemente uno de los Objects del Wherigo que, en un principio, no tenía pensado introducir aquí, pero al que durante las últimas semanas le he encontrado una utilidad cada vez mayor: las FUNCTIONS.

FUNCTIONS

Una function consiste en un “bloque de programación” que puede llamarse a ser ejecutado tantas veces como se necesite en el cartucho. Aunque pueda parecer algo confuso, en realidad es muy sencillo de entender y lo vamos a ver con un ejemplo. Imaginemos que hemos programado un cartucho Wherigo en el que el jugador tenga que disputar una partida de piedra, papel o tijera con la máquina y que, al superarla se debieran activar numerosas zonas. El jugador podría ganar la partida sacando cualquiera de las tres figuras del juego, por lo que en cada una de ellas habría que contemplar la posibilidad de que fuera la definitiva y proceder a la activación de ese elevado número de zonas, lo que sería muy engorroso. Sería mucho más sencillo programar una function llamada “Ganador de piedra, papel o tijera” que activara todas esas zonas y simplemente “llamarla” cuando procediera.

Para crear esta function seguiríamos los siguientes pasos:

  1. En la barra de menús de Urwigo, seleccionamos View, Functions.

cartridge2) Como siempre, tendremos una pantalla con una columna central en la que se irán listando las distintas functions que hayamos creado y una columna derecha con las propiedades de cada una de ellas. Pulsaremos el botón “New Item” para crear la primera function y rellenaremos los siguientes campos de la columna de propiedades:

a) Name: Le daremos un nombre lo suficientemente descriptivo para poder trabajar con ella de forma sencilla.

b) Description: Una pequeña descripción de la function. Por ejemplo cuando debemos ejecutarla o los efectos que produce.

c) On call: Aquí programaremos de la forma habitual todo lo que queramos que ocurra al ganar la partida ya sea con piedra, papel o tijera. Por ejemplo, un Dialog de “ENHORABUENA”, y activar y hacer visibles las zonas 1, 2 y 3, como en el siguiente ejemplo. La clave está en que sólo tendremos que programar esta estructura una vez y no tres como deberíamos hacer si no utilizaramos las functions.

cartridgeAsí, sólo habría que utilizar la ActionFunction call” y arrastrar la function recién creada a su interior cada vez que queramos que se produzcan los efectos de la misma, es decir: cuando el jugador elija piedra y la máquina escoja tijera, cuando el jugador elija papel y la máquina escoja piedra y cuando el jugador elija tijera y la máquina escoja papel. Las elecciones de la máquina se realizarán utilizando la ActionRandom decision” a un 33,33% cada una, como veremos en su momento en esta misma entrega del tutorial.

cartridge

ACTIONS

Finalizada ya la exposición de todos los Objects que podemos crear en nuestro cartucho Wherigo, vamos a analizar ahora las distintas Actions que podemos utilizar para darle forma. Muchas de estas Actions ya las hemos utilizado como ejemplos a lo largo del tutorial, pero nos detendremos de nuevo en cada una de ellas para obtener un listado lo más completo posible. Como sabemos, podemos encontrar las Actions en la columna izquierda de la ventana de Urwigo y la manera de utilizarlas es arrastrarlas al lugar que corresponda en el evento que estemos preparando.

If/Else

La Action If/Else, es la única que hasta ahora ha contado con un tema propio del tutorial, en concreto la séptima entrega. Con ella podremos establecer condiciones para que, en funcion de un determinado supuesto, se produzca una consecuencia u otra.

La fórmula que utiliza esta action es fácilmente comprensible, aunque difícil de explicar de palabra: “Si es A, entonces B”, “Si es C, entonces D”, “Si es cualquier otra cosa distinta a A o B, entonces E”; o lo que es lo mismo: “If A: B”, “If C: D”, “Else: E”. Aunque pueda parecer algo complejo en los siguientes ejemplos gráficos lo comprenderemos rápidamente.

Vamos a crear una partida de “Piedra, papel o tijera” contra la máquina. Para ello, debemos crear un Input de tipo “choice” en el que se pregunte al jugador “Piedra? Papel? Tijera?” y se le ofrezcan estas tres posibilidades como respuestas alternativas tal y como podemos observar en el siguiente ejemplo:

cartridgeA continuación en el On get input debemos programar lo que debe ocurrir en el caso de elegir cada una de las tres opciones, para lo que utilizaremos la Action If/Else para establecer: “Si la respuesta es piedra, entonces…”, “Si la respuesta es papel, entonces…” y “Si la respuesta es tijera, entonces…”. Lo que ocurra tras “entonces” lo programaremos más adelante utilizando otras Actions. Por ahora, únicamente arrastraremos If/Else dentro del On get Input y utilizaremos el signo “+” para crear tres condicionales distintos como en la siguiente imagen:

cartridgeLo que queremos que haga el cartucho en cada uno de esos tres condicionales es comparar la respuesta dada por el jugador con cada una de las posibles alternativas para, más adelante, establecer unas consecuencias para cada caso. Para conseguir este efecto arrastraremos dentro de cada uno de ellos la Expression “Compare” (obviamente es una instrucción para comparar dos elementos) y, a continuación, haremos lo mismo con la Expresion “Answer” (expresión que hace referencia a la respuesta dada por el jugador) al lado izquierdo de cada una de las tres igualdades generadas. Por último, escribiremos las palabras “piedra”, “papel” y “tijera” en el lado derecho de estas igualdades. Así obtenemos la instrución tipo “Si comparas la respuesta del jugador con la palabra “piedra” (o “papel”, o “tijera) y resulta ser igual, entonces…”. El resultado gráfico es el de la siguiente imagen:

cartridgeRealizar una enumeración de todas las posibilidades que nos ofrece esta o cualquier otra Action convertiría en eterno este tutorial, pues la cantidad de combinaciones es inabarcable. Por este motivo, lo importante es comprender el funcionamiento de cada una de ellas, para así deducir como se deben combinar para obtener el efecto que hemos ideado (si es que Urwigo nos permite conseguirlo dentro de sus limitaciones, claro).

RANDOM DECISION

La Action Random Decision sirve para que el cartucho tome una decisión aleatoria entre las distintas alternativas que le demos basándose en un porcentaje de probabilidades que nosotros establezcamos. Podríamos utilizarlo, por ejemplo para lanzar una moneda al aire y que hubiera un 50% de probabilidades de que saliera cara y un 50% de que saliera cruz. a traves del siguiente sencillo evento:

cartridgeAl hacer click sobre el porcentaje, aparece en la columna de la derecha un cuadro llamado Weight con el que podemos modificarlos para que existan las posibilidades que nosotros queramos de obtener cada una de las opciones. Así podríamos obtener una moneda “trucada” en la que saliera cruz la gran mayoría de las veces:

cartridgeLas posibilidades no se limitan a dos alternativas. Utilizando el signo “+” del Random decision podemos establecer todas las que nos hagan falta, cada una con su porcentaje de probabilidades particular:

cartridgeSiguiendo con nuestro ejemplo de la partida de “Piedra, papel o tijera”, lo que necesitamos es que para cada una de las tres posibles respuestas del jugador, exista un 33,33% de probabilidades de que la máquina responda asimismo con cada una de las tres posibles jugadas. Por lo tanto bajo el “If compare answer” que hemos programado anteriormente, debemos colocar una Random decision de 3 alternativas a un 33,33% de probabilidades cada una, como muestra la siguiente imagen:

cartridge

INCREMENT/DECREMENT

A través de esta Action sumaremos o restaremos determinada cantidad que queramos a un número dado en una variable de tipo numérico. El formato es el siguiente, pudiendo incrementar o reducir el número utilizando el cuadro “Value” que aparece en la parte superior derecha de la pantalla al hacer click sobre el número tal y como se puede apreciar en el siguiente ejemplo.

cartridge

En la partida de “Piedra, papel, o tijera” que estamos creando, vamos a imaginar que se deben ganar 3 partidas para avanzar en el juego. Tras cada mano, debemos indicarle al cartucho que el jugador o la máquina han ganado dicha roda y que, en consecuencia, le queda una menos para llegar a su tercera victoria. Para conseguirlo crearemos dos Variables numéricas de valor 0 a las que llamaremos “Victorias del jugador” y “Victorias de la máquina”. Así incrementaremos cada una de esas variables donde corresponda dentro del evento que estamos creando. Cuando en el siguiente paso establezcamos cual es la jugada de la máquina se entenderá mucho mejor este concepto.

De esta manera, en una de las tres alternativas al 33,33% que hemos creado en cada respuesta introduciremos un Increment/Decrement +1, colocando la variable que corresponda en el lado izquierdo de la Actión. ¿Qué ocurre con la tercera opción? Pues que la máquina habrá elegido la misma jugada que el jugador, por lo que será un empate (piedra y piedra). El evento debería quedar como en la siguiente imagen.

cartridge

DIALOG

La Action Dialog la hemos utilizado en muchas ocasiones a lo largo de este tutorial, por lo que no vamos a profundizar excesivamente en ella. Sirve para lanzar al jugador un mensaje de texto acompañado de una imagen. Escribiremos el texto entre las comillas y haremos click en “Dialog Entry” para seleccionar una imagen en el cuadro que aparecerá en la parte superior derecha de la pantalla:

cartridge

Haciendo click en el signo “+” continuaremos añadiendo dialogs sucesivos en el que cada uno podremos vincular una imagen distinta para crear el efecto de un diálogo entre dos o más personajes:

cartridge

Seguiremos completando nuestra partida de “Piedra, papel o tijera” introduciendo un Dialog con la jugada que sacará la máquina en cada opción, acompañándola de una imagen que represente dicha jugada. Debemos colocar cada jugada donde corresponda según hayamos predicho que ganará la máquina o el jugador con los “Increment/Decrement” anteriores. De esta manera, deberíamos obtener algo así:

cartridgeSi el jugador elige “piedra” en un 33,33% de las ocasiones, la máquina elegirá “papel” y ganará; en un 33,33% elegirá “tijera” y ganará el jugador; y en un 33,33% elegirá piedra y habrá un empate.

cartridgeSi el jugador elige “papel”, en un 33,33% de las ocasiones la máquina elegirá “tijera” y ganará; en un 33,33% de las ocasiones elegirá “piedra” y ganará el jugador; y en un 33,33% de las ocasiones elegirá “papel” y habrá un empate.

cartridgeY por último, si el jugador escoge “tijeras”, en un 33,33% de las ocasiones la máquina escogerá “piedra” y ganará; en un 33,33% de las ocasiones escogerá “papel” y ganará el jugador; y en un 33,33% de las ocasiones elegirá “tijera” y habrá empate.

MESSAGE

La action Message ofrece un mensaje de texto al jugador con la posibilidad de acompañarlo de una imagen y, en su caso, hasta dos botones para que, dependiendo de cual seleccione el jugador, se de una circunstancia y otra. Vamos a ver como lanzar un mensaje que de la opción al jugador de comenzar una partida de “Piedra, papel o tijera” o no hacerlo.

En primer lugar lanzaríamos la Action Message y, entre las comillas, escribiríamos “QUIERES JUGAR A PIEDRA, PAPEL O TIJERA?”. A continuación en el texto de los botones, escribiríamos SI y NO respectivamente y seleccionaríamos la imagen que corresponda:

cartridgeA continuación, en el interior del “On clicked” arrastraríamos un If/Else y, dentro del If, la ExpressionMessage button” que, como puede imaginarse, sirve para establecer las consecuencias de seleccionar el primero de los botones del Message. Esta consecuencia no es otra que lanzar el Input del juego “Piedra, papel o tijera” que estamos creando. En el Else estableceríamos lo que queremos que ocurra en el caso de que el jugador presione el botón 2:

cartridgeTengo que decir que hasta hoy no conocía las posibilidades de la Action Message y me parecen muy interesantes. Para conseguir el mismo efecto yo lo complicaba bastante más, lo que prueba que yo también estoy aprendiendo con este tutorial [:D].

SHOW SCREEN

Esta es otra Action que nunca he utilizado, pero que me ha resultado muy interesante comprobar sus posibilidades. Sirve para mostrar al jugador algo en la pantalla en el momento que nos interese. En algunos de mis Wherigos, al utilizar un item, por ejemplo, se produce una consecuencia y, tras esto, el jugador sigue viendo la pantalla de su inventario en lugar de, por ejemplo las nuevas zonas a las que puede ir desde ese momento, lo cual hace el cartucho poco intuitivo para gente poco acostumbrada a jugar Wherigos. Lanzando la action “Show screen“, podemos mostrar al jugador la pantalla principal (Main Screen), las zonas disponibles (Location), su inventario (Inventary), el menú de tareas (Task). Por último existe la opción de mostrar Item, pero yo no he sabido utilizarla, ya que no consigo mostrar un determinado Item en pantalla utilizándola, por lo que agradecería que cualquiera que sepa su utilidad lo explicara en un comentario a esta entrada (ejem Mitesoro!! ejem Kenobi!!!).

La manera de utilizar esta acción es simple. Sólo hay que arrastrarla al momento en el que se quiera mostrar algo en pantalla y seleccionarla dentro del menú Screen que aparece en la parte superior derecha de la pantalla:

cartridge

SHOW OBJECT DETAILS

Esta es la Action que ofrece el resultado que yo esperaba y no conseguí a través de Show Screen Item, es decir, mostrar en pantalla un determinado Item del juego junto a su descripción. Su utilización es muy sencilla, bastando con arrastrarla al momento en el que se quiera mostrar el Item y, a continuación, arrastrar a su interior el Item en cuestión, quedando el evento de la siguiente manera:

cartridgeINPUT

Esta es otra Action que hemos utilizado en varias ocasiones a lo largo de este tutorial, pues sirve para ejecutar un Input que hayamos creado previamente. Su uso es tan simple como arrastrarlo al momento en que queramos que se ejecute el Input y a continuación, arrastrar dentro dicho Input, quedando el evento de la siguiente forma:

cartridge

START TIMER / STOP TIMER

Estas dos Actions las describimos detalladamente en la anterior entrega del tutorial. Sirven respectivamente para poner en marcha y detener un Timer que hayamos creado previamente. Su uso es sencillo y funcionan de la misma forma. Arrastrando al lugar donde queramos iniciar o detener el temporizador y arrastrando respectivamente dicho temporizador a su interior. La siguiente imagen no tendría sentido práctico, pues se pondría en marcha el cronómetro para, a continuación detenerlo, si bien sirve para observar la estructura que deben adoptar ambas Actions en el lugar correcto que les corresponda. Para más información, consultar la referida entrega anterior.

cartridgeFUNCTION CALL

El funcionamiento de esta Action lo hemos descrito al comienzo de esta misma entrada. Sirve para “llamar” a la ejecución de una Function que hayamos creado previamente. Me remito a lo dicho al comienzo de la entrada:

cartridgePLAY SOUND /STOP SOUND

Estás dos actions nos servirán respectivamente para iniciar y detener la reproducción de un sonido que hayamos agregado previamente al Menú de los Media, tal y como vimos en la tercera entrega de este tutorial. Como viene siendo habitual sólo deberemos arrastrar la acción que corresponda al lugar del evento en que convenga. Mientras que Play Sound requiere que arrastremos a su interior el audio que pretendamos reproducir, no ocurre lo mismo con Stop Sound, que detiene la reproducción de cualquier audio que se esté escuchando en ese momento que, de otra manera sonaría hasta su finalización. Al igual que ocurría en el ejemplo de START TIMER/STOP TIMER, el siguiente ejemplo carecería de efecto práctico, pues comenzaria a sonar el audio para detenerse en ese mismo momento. La imagen solo pretende exponer la estructura de ambas actions que deben adoptar en el lugar que corresponda:

cartridge

SAVE GAME / SAVE AND CLOSE GAME

Estas Actions permiten al programador del cartucho que, en determinado momento del mismo, la partida se salve de forma automática en el dispositivo del jugador sin que este realice ninguna acción específica. Esto puede servir para que, en el caso de jugadores con poca experiencia que olviden salvar su avance periódicamente, evitar que tras un avance importante en la aventura, se pudiera perder la misma por no salvar manualmente. Personalmente, soy partidario de que quien realice un wherigo sea responsable de sus acciones y juegue concentrado, por lo que no me gusta decirle cuando debe o no salvar su partida. Si bien también puede servir para evitar que un jugador “travieso” salve manualmente la partida y, tras tomar una decisión erronea que le debería obligar a volver a empezar la partida, retome la partida salvada previamente y vuelva a intentarlo. Todo depende del grado de exigencia del programador.

La diferencia entre ambas actions únicamente radica en que SAVE GAME salva la partida, mientras que SAVE AND CLOSE GAME tras salvar los avences, expulsa al jugador del cartucho sin darle opción a hacer nada más.

La forma de introducir estas actions en un evento es la más simple posible, pues únicamente hay que arrastrarlas al lugar en el que se quiera que produzcan efectos sin tener que añadir nada más.

cartridgeLUA USER CODE

Urwigo es un entorno gráfico que permite la programación de cartuchos Wherigo de una manera intuitiva y al alcance de casi cualquiera. Pero estos cartuchos funcionan en realidad bajo un lenguaje de programación denominado LUA. A través de la Action LUA USER CODE y la expression Lua user expression podremos introducir fragmentos de código LUA en nuestro cartucho, obteniendo resultados espectaculares que no están al alcance del limitado entorno gráfico que es Urwigo. Por supuesto, para utilizar con garantías este código es necesario tener unas mínimas nociones del mismo, cosa que supera con mucho mi limitada capacidad. Sin embargo tengo al Maestro Kenobi-LJN trabajando en un tutorial para quien quiera profundizar en este aspecto de Wherigo e invito a todos a leer con detenimiento el tutorial que Mitesoro publicó en Geocachingspain.com para poder introducir acentos y caracteres como la “ñ” en nuestros cartuchos utilizando LUA. Muchas gracias por este magnífico tutorial que tantas veces he utilizado en mis cartuchos Mitesoro!!!

COMMENT

Aunque no la he utilizado nunca, creo que esta action sirve únicamente para introducir comentarios en el cartucho, que son notas del programador que no tienen otra utilidad que ser leidas por el para aclararse dentro de la estructura de su cartucho. Aunque yo no le veo mucha utilidad, todos los programadores de verdad que conozco utilizan comentarios en sus obras, de manera que queda a vuestra disposición utilizar la Action o no.

Su estructura es sencilla. Únicamente hay que arrastrar la Action al lugar donde queramos insertar el comment y escribir en él lo que consideremos necesario.

cartridge…………………………….

Y con esto hemos analizado todas las Actions que nos ofrece Urwigo y damos por concluida la entrega de hoy del tutorial. Para aquellos pocos de vosotros que estais siguiendo EL RETO, ya no es necesario que me sigais enviando vuestros avances utilizando todo lo explicado hoy, pues no se puede exigir que un cartucho haga uso de todas las Actions posibles. Seguid dando forma a vuestro cartucho, pues sólo quedan una o dos entregas del tutorial y será en ese momento cuando me lo tengais que enviar concluido para decidir quien es el ganador.

¡¡¡FELIZ GEOCACHING Y FELICES WHERIGOS A TODOS!!!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s