3er paso: generalizar un algoritmo (parte III)

Por si es el caso de que acabes de caer de un plato volador o situación similar, te recuerdo que en esta página dejaremos por un rato de hablar de polígonos, geometría y demás yerbas. Vamos a empezar y terminar un mini-proyecto pensado para introducirnos en el uso de las variables…

Las variables en Scratch

Podríamos hablar por horas sobre el uso de las variables en programación, pero no hay nada como aprender probando y creando.
En esta ocasión vamos a crear un proyecto "transitorio" para empezar a explorar esta nueva potencialidad dentro de Scratch… por otro lado Pier anda medio "caído" y no es buen momento para molestarlo.
En este proyecto buscaremos controlar a través del uso del mouse una animación simple —animación similar a la obtenida al promediar nuestro 1er Tutorial— e implementaremos también un contador de "interrupciones del movimiento".

Proyecto molesto al gato

Así sin una puntuación o comillas lo escrito parece tener alguna que otra ambigüedad. Abrí por lo pronto un nuevo proyecto en Scratch.
animación
Cuando dijimos más arriba "una animación simple" estábamos hablando en serio. Empezá armando el pequeño programita que estas viendo, destinado a ser usado por el único objeto de nuestro nuevo proyecto: el gato de Scratch.
Desde ya que asumo que no necesitarás de mayores explicaciones para entender de que trata el programa y qué efecto tiene sobre el objeto —si seguiste el 1er Tutorial esto te debe parecer elemental—. Y si no recordás como hacer para evitar que el gato quede "cabeza abajo" mirá aquí.

Que queremos lograr

Lo que vamos a buscar ahora, partiendo de este programa base, es:
  • ver de que manera controlar el avance del gato: este deberá detenerse al ser tocado con el puntero del mouse.
  • dando muestras evidentes de su disgusto se tomará un par de segundos para expresar su desagrado, e intentará seguir (si es que lo dejamos tranquilo).
  • finalmente, la cantidad de veces que lo "molestemos" deberá aparecer en pantalla (todo sea por un fin educativo… ¡al gato lo apreciamos!).
Desde ya que hay muchas maneras de resolver ésto: nosotros seguiremos aquella en donde mejor se expresen los fines didácticos pretendidos.
Arranquemos pensando ("oh, no… siempre hay que pensar"). ¿Qué instrucción hace mover a nuestro amigo? ¿Puedo quitarla? ¿Puedo cambiarla? ¿Cambiarla cómo?
—te recuerdo que necesitamos "detener" al gato—
Por suerte nuestro algoritmo es simple y resulta claro ver que la instrucción clave es mover (10) pasos. Podríamos intentar quitarla cuando se dé la circunstancia de hacerlo (reacción al "toque del mouse"). Podríamos cambiarla por mover (0) pasos (que sería una instrucción neutra). O…
O podríamos hacer que la cantidad de pasos sea variable. A veces 10, a veces 0. Siempre el gato averiguando cuanto es lo que va a moverse, nunca sabiéndolo de antemano (muy poco burgués, me interesa la filosofía de este gato).

Pasando de la digresión previa a nuestra inefable y cuantificada visión:
¿qué meter dentro de la instrucción mover ?  UNA VARIABLE.

Primero a crear la variable

En el Área de Selección de Bloques de Scratch deberemos hacer clic en el botón Variables. No encontraremos allí (por ahora) más que dos nuevos botones cuya función es la de permitirnos la creación de nuevas variables o listas.
Haciendo clic en Nueva variable se nos presentará una ventana de diálogo autoexplicativa:

Le pondremos a nuestra primer variable (¡qué emoción!)  el nombre pasos.

Vamos a dejar chequeada la opción Para todos los objetos ya que esto no afectará ni el funcionamiento del programa ni el desarrollo de nuestra explicación, y sólo nos quedará Aceptar: ¡voilá! … ya creamos la variable pasos.
selección variables
dar nombre a variables
Como fruto de esta creación también aparecerá un nuevo set de bloques de instrucción para manipular a nuestra criatura. Pero no sólo esto: fijate en la esquina superior izquierda del escenario…vayamos paso a paso para no confundir.

Explicación 1

formas de ver las variables
¡Atenti! : de la imagen de aquí a la derecha solo te va a aparecer el primer "monitor" de la variable pasos, cuya función es obvia: nos permitirá conocer cual es el valor almacenado en la misma.

NOTA 1

Como en la mayoría de los lenguajes de programación, en Scratch también se cumple que el valor asignado a cualquier variable recién creada será el de 0 [cero] —lo que obviamente después podrá ser cambiado—.
Pero hay dos modos más en que podemos "ver" el valor de la variable: podemos acceder a ellos haciendo clic derecho sobre el monitor, apareciéndosenos entonces un menú desplegable (ver 2da muestra) que nos permite acceder a las opciones grande o deslizador (3ra y 4ta muestras) ; también nos permitirá seleccionar la opción de ocultar el monitor si así lo quisiésemos.

NOTA 2

Como veremos más adelante, la opción deslizador no sólo nos permitirá monitorear la variable, sino también cambiar su valor aún estando con el programa en funcionamiento —si estás pensando en el control de volumen de tu reproductor de música es que yo realmente leo tu mente, ¡y eso me asusta!—.

Explicación 2

Regresemos a los bloques que nos permitirán manipular la variable: dos de ellos serán los más importantes: fijar le impone un valor más allá de cual haya sido el valor previo, y cambiar le sumará un número positivo o negativo al preexistente —una vez más la idea de absoluto y relativo sobre la cual charlamos aquí y aquí
bloques sobre variables
Los bloques mostrar y esconder permiten manipular desde el programa la visibilidad del monitor de la variable (si, el mismo monitor sobre el cual hablamos más arriba).
La casillita de chequeo nos ofrece la manera más rápida de ocultar/mostrar el susodicho monitor.
Dejamos para lo último al bloque más importante: la referencia a la variable en sí (pasos), que es la que deberemos arrastrar y colocar dentro de aquellos bloques donde pueda escribirse un valor numérico fijo… en un momento lo veremos.

Ya aprendimos a crear una variable.
Tendremos que ver como hacer para que si el gato es tocado por el puntero del mouse su valor sea 0 (cero); caso contrario su valor deberá ser 10 (diez).
Suena bastante a que el algoritmo debe posibilitar el tomar una decisión a partir del hecho de evaluar una condición… es momento de hablar de un tema pendiente: las estructuras de control del tipo condicional.

SOBRE EL CONTENIDO DE LAS VARIABLES

Si bien en nuestro trabajo usaremos las variables como "contenedores" de valores numéricos, a partir de la versión 1.4 de Scratch ellas también pueden almacenar cadenas de texto (palabras o texto, bueh)… esto permite ampliar y mucho el universo de opciones a la hora de enriquecer proyectos anteriores, o idear nuevos basados en esta posibilidad.

To be or not to be  (depende…)

No lo veo a Hamlet preocupándose por algoritmos y cuestiones derivadas (te "garanto" que tiene alguna que otra cuestión "caminándole" por su cabeza) .
decisión
El reflejo de nuestras palabras previas en el programa debería conducirnos a algo como lo que ya estás viendo. Es importante que notes una cosa: al llegar a este bloque de decisión el hilo de ejecución de las instrucciones se bifurcaráo se sigue un camino o el otro, pero nunca ambos a la vez… o determinamos que la variable tenga valor 0 o valor 10.
Lo que estamos usando en este caso es una estructura condicional en una de sus variedades: la de selección doble ; Scratch también admite la estructura de selección simple, pero aprovechemos a señalar que el lenguaje no tiene contemplada la posibilidad de bloques de selección múltiple.
Estructura Condicional de control
La estructura condicional se utiliza para indicarle al computador que debe evaluar una condición y, a partir del resultado, ejecutar el bloque de instrucciones correspondiente. La forma más común está compuesta por una proposición (condición) que se evalúa y dos bloques de instrucciones que se ejecutan, uno cuando la condición es verdadera (selección simple y doble) y otro cuando ésta es falsa (únicamente en la selección doble).

Aunando fuerzas

miniprograma1
Supongo que te debe carcomer la ansiedad por ver como funciona todo esto junto.
Un par de cuestiones a resaltar:
  • fundamental: se reemplazó el valor fijo 10 en el bloque de movimiento por el bloque que representa a nuestra variable pasos. Ahora el gato se moverá una cantidad de pasos igual al valor que tome la variable, y esto es cambiante dependiendo del hecho que el puntero del mouse lo esté tocando o no.
  • Se agregó el bloque fijar [pasos] a (10) como condición inicial: recordemos que al crear la variable su primer valor será cero y conviene cambiarlo. De cualquier manera no es de mayor relevancia para el funcionamiento del programa, y podría haberse obviado.
  • Se agregó el bloque decir para que el gato "proteste" por 2 segundos en caso que el puntero del mouse interfiera en su desplazamiento (comportamiento que definimos al principio de este mini-proyecto)
Fijate que esta última instrucción mencionada "detiene" la secuencia de ejecución de bloques por 2 segundos. Si al cabo de los mismos el puntero sigue tocando al gato este volverá a repetir su "queja" por 2 segundos más, y así hasta que deje de producirse el contacto.
Date tu tiempo para entender el funcionamiento del programa antes de seguir… nadie te apura. Aprovechá el monitor de la variable para enterarte de los cambios en su contenido, probá de cambiar valores, ¡jugá!. Cuando te parezca que estás listo seguimos…

¡Falta el contador!

Falta el contador, un asistente legal, la secretaria, el cadete… la nuestra es una empresa chica (perdón por el mal chiste, el cansancio está haciendo estragos en mi psiquis).
Falta agregar un contador de la cantidad de veces que interrumpimos  el andar de nuestro gato, y esto deberá aparecer en pantalla ¿Qué mejor que una nueva variable para almacenar estos valores, y usar su monitor para ir viendo "el tanteador"?
miniprograma2
Pasemos directamente a crear otra variable que llamaremos toques. Una vez hecho esto aparecerá un nuevo bloque representando a la nueva variable, y también un nuevo monitor en el escenario.
Vas a observar que en el Área de Selección de bloques no aparecen nuevos bloques fijar, cambiar, etc. vinculados a esta nueva variable en especial: desde la versión 1.4 de Scratch estos bloques disponen de una lista desplegable que nos permite seleccionar las variables existentes (o pasos o toques… nuestras 2 únicas variables).
Como seguro ya estás viendo, un bloque cambiar [toques] por (1) deberá ser colocado dentro de la estructura condicional, obviamente para ser ejecutado solo si la condición ¿tocando apuntador del ratón? es verdadera… are you understand?
¿Pero por qué agregamos un bloque fijar [toques] a (0) como condición inicial?
Si no fuese así, la primera vez que usemos el programa la variable toques hubiese sido cero porque cero es el valor inicial por defecto de cualquier variable. Pero si paramos y arrancamos nuevamente el programa, Scratch no se encarga de resetear su valor, y por tanto siempre va a quedar como nuevo valor de inicio el último valor almacenado en la variable (que puede ser cualquiera).

Conclusión —y agendala en tu cabeza porque en algún momento vas a querer hacer tu propio juego y ponerle una variable SCORE—: los valores almacenados por nuestras variables son de nuestra más absoluta responsabilidad (por suerte), y la única decisión del entorno es asignarle el valor 0  por defecto al ser creada; de ahí en más nos deberemos ocupar nosotros…

Esta especie de miniTutorial "anidado" dentro de otro fue un verdadero tour de force —me enganché con esta franca expresión—, pero creo que valió la pena. Espero que hayas salido sabiendo lo suficiente sobre variables como para entender lo que sigue, y como para aprovecharlo en el futuro.
Para que puedas seguir es más que probable que tengas que releer la primera página de este 3er paso (de hecho para poder seguir escribiendo yo lo voy a tener que hacer… —¿ya avisé que soy de irme por las ramas?: son mis ancestros homínidos—).
Esperando que hagas tu paciente relectura (con toda esta nueva info creo "que te van a caer unas cuantas fichas" sobre lo allí escrito), yo me voy a ver como la va llevando Pier, que debe estar más para interpretar el Fantasma de la Ópera que para otra cosa…
Última actualización: Febrero 24, 2014

No hay comentarios.:

Publicar un comentario

© Scratch CodeLab | D153ñ0 b454d0 3n l4 pl4n71ll4 SimpleRWD d3 Oloblogger