Bienvenidas/os a un nuevo artículo de ejercicios con Scratch. En la primera tanda explicamos y ejercitamos los concepto básicos como, por ejemplo, las condiciones iniciales. En el segundo empezamos con ejercicios prácticos (incluso rompimos nuestro robot). En esta quinta entrega seguiremos la misma metodología. Recordad que, para ver los retos y las soluciones, deberéis ir al usuario que he creado para estos artículos aquí.

Pero vamos al lío, que tenemos trabajo por delante. Hoy programaremos un control de robot mediante el teclado direccional. Es decir, crearemos un pequeño joystick usando las teclas de las flechas del teclado. Y lo haremos usando lo que hemos aprendido hasta hoy.

Pero antes, debo confesaros que os dije una mentirijilla en el anterior artículo. Durante todo el artículo estuve hablando de bifurcaciones. Y no está mal, pero la realidad es que ese no es el nombre técnico que suele recibir. El nombre técnico que suele recibir es Instrucción Condicional.

Y entonces, ¿por qué os dije un nombre que no era? Pues porque en el artículo anterior quería que se entendiera el concepto de cómo esta instrucción alteraba la secuencia de ejecución. Espero que me perdonéis la pequeña trampa.

Se les llama instrucciones condicionales porque en cada bifurcación del código revisan si se cumple o no una condición y siguen la secuencia de ejecución según el resultado de dicha comparación de condiciones.

Venga, vamos al lío con el conjunto de ejercicios del día. Pero primero, no os libráis de:

UN POCO DE TEORÍA

En primer lugar, tenemos que retomar los sistemas de vuelta de captación de información. En este caso será el teclado. Nosotros pulsaremos una tecla y esta obligará a BaMiau a obedecer una orden. Ahí tendremos un programa que estará captando información de unos dispositivos (teclas del teclado) y actuará en consecuencia.

A tal efecto podríamos considerar:

  • El teclado actuará como un conjunto de sensores, aunque no sea la definición esencial del mismo.
  • El ordenador actuará como el sistema controlador del robot.
  • BaMiau ejercerá el papel de actuador, ya que sustituye al sistema motor del robot (motores, ruedas, brazos, patas, etc…)

RETOS DE HOY

RETO 11

En primer lugar preparemos el código para que este haga lo siguiente:

  1. Al hacer click en la bandera verde el código debe arrancar.
  2. Estableceremos las condiciones iniciales.
    • Posición: X= 0 y Y=0.
    • Apuntar dirección: 90º
  3. Estableceremos un bucle que tendrá como condición de salida la tecla “s” (por simbolizar la “salida”.
  4. Una vez finalizado el bucle haremos que BaMiau diga “Lo has conseguido” durante 2 segundos para verificar que hemos salido del bucle y que el programa finaliza.

Con esas instrucciones habremos establecido una estructura base para poder encender y apagar el mando siempre que queramos. Es decir, habremos habilitado el botón de Encendido y Apagado de nuestro robot.

Bien lo que queremos conseguir ahora es que cuando le demos a la bandera verde BaMiau estará girando sobre si mismo hasta que pulsemos la tecla “s”. Os dejo un ratito para que lo intentéis, para cualquier duda podréis hallar una solución en el fichero RETO_11_SOL.

RETO 12

Ahora que tenemos la estructura básica podemos verificar que sigue el siguiente esquema:

ejercicios scratch

Bien, estamos listos para darle la primera orden de movimiento y eso es lo que haremos a continuación. Lo que queremos conseguir ahora es que cuando se pulse la tecla flecha hacia arriba BaMiau se mueva en dicha dirección. Pero no debemos alterar nada de la estructura que hemos establecido en el reto anterior. Consecuentemente tendremos que lograrlo alterando únicamente la parte del código que corresponde al interior del bucle. Para ello tendremos que usar instrucciones de movimiento y asegurar que va en la dirección correcta.

Lo que construiremos ahora es un bloque de código. Es decir, estableceremos el conjunto de instrucciones que BaMiau ejecutará cada vez que alguien pulse una tecla de movimiento. Por ello debemos considerar todo lo que BaMiau deberá hacer cada vez que alguien pulse la tecla flecha hacia arriba.

Podréis hallar una solución en el fichero RETO_12_SOL.

Una vez solucionado este reto, replicaremos el mismo bloque de código de la flecha hacia arriba, pero apuntando hacia abajo, luego hacia la derecha y luego hacia la izquierda. Pero ahora es mucho más sencillo, solamente tenemos que poner en el mismo orden las mismas instrucciones y modificar los valores pertinentes para identificar la dirección y a que tecla corresponden. De esta manera, tendremos el control completo del movimiento a través del teclado.

Podréis hallar una solución en el fichero RETO_12_SOL2.

RETO 13

Bien, tenemos un programa que nos permite controlar el movimiento de BaMiau usando los cursores del teclado. No obstante, seguro que podemos mejorar el sistema. Examinemos la segunda solución propuesta. Si miramos el contenido del bucle observaremos que hay unas cuantas instrucciones que se repiten muchas veces, como se observa en la imagen anterior.

Partiendo del código de RETO_12_SOL2 os propongo conseguir reducir el código un total de 3 instrucciones. ¿Os veis capaces?

SOLUCIÓN RETO 13

Veamos ahora en qué podemos mejorar el código del reto 12 y resolver el reto actual. Si examinamos el código propuesto veremos que en cada bloque condicional, justo debajo de la tecla a la que dan función (arriba, abajo, derecha o izquierda), podemos observar que siempre están:

  • Mover 10 pasos
  • Si toca un borde, rebotar

Lo que podemos conseguir es mirar si alguna de estas acciones la podemos poner una única vez, pero que se ejecute igualmente cada vez. La idea sería colocar dicha instrucción dentro del bucle (para que se ejecute mientras el programa esté funcionando, es decir hasta que pulsemos la tecla s. Así que tenemos que quitar aquella instrucción que no condicione en nada el funcionamiento de cada condicional.

Podéis hallar la solución en RETO_13_SOL.

Como se puede observar en la solución, podemos quitar la instrucción de rebote si BaMiau está tocando el borde sin que ello afecte en nada al funcionamiento del programa. Por contra, si sacamos en su lugar la instrucción Mover 10 pasos lo que ocurrirá es que BaMiau no dejará de moverse en ningún momento.

El motivo de este continuo movimiento es que en las instrucciones condicionales solamente le estaremos indicando en qué dirección debe moverse. Pero eso no es lo que queremos. Lo que perseguimos es que BaMiau solamente se mueve cuando tenemos una tecla pulsada y, además, que lo haga en la dirección que elegimos.

CONCLUSIÓN

Ya hemos conseguido un control de movimiento completo de un robot. O, más preciso, el control de movimiento de un videojuego muy simple. Si en la pantalla tuviéramos un laberinto dibujado, por ejemplo, podríamos jugar a resolverlo.

En futuros artículos aprenderemos a añadir nuevos elementos a la pantalla y así añadiremos complejidad tanto por cantidad de elementos a controlar, como por la complejidad de las acciones de control.

Y con esto y un bizcocho (yo siempre los recomiendo con chocolate y más si es de Batman) habremos terminado los nuevos ejercicios. Espero que os hayan gustado y recordad que podéis consultarme cualquier duda, ya sea de estos ejercicios con scratch o cualquier otra cosa, mandando un correo electrónico a marc@bebeamordor.com. ¡Nos vemos en el siguiente artículo!

Marc Travé
Soy Marc, a veces conocido como Krennaste. Actualmente con el privilegio de estar en la junta de Ayudar Jugando (www.ayudarjugando.org). Ingeniero vocacional, apasionado de la música rock y de meterse bajo el océano, friki (de narices según mis amigos/as), frikitradi, leer es mi manera de respirar, me encanta hacer radio y participar en el podcast @0enCordura .

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí

En cumplimiento de la legislación española vigente en materia de protección de datos de carácter personal y del reglamento europeo RGPD 679/2016 le informamos de:
Responsable: Julia María Iriarte Gahete + info
Finalidad: Gestión del envío de información solicitada, gestión de suscripciones al blog y moderación de comentarios. + info
Legitimación:: Consentimiento expreso del interesado. + info
Destinatarios: No se cederán datos a terceros para la gestión de estos datos.
Derechos: Tiene derecho a Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la información adicional. + info
Información adicional:: Puede consultar la información adicional y detallada sobre Protección de Datos Personales en mi página web bebeamordor.com + info