En esta nueva entrega para aprender a programar, vamos a programar la rueda de la fortuna en Scratch. La rueda de la fortuna es esa famosa ruleta que aparece en muchos programas de televisión donde un participante gira una rueda y una aguja indica el resultado obtenido.
Es muy común ver este dispositivo en juegos de concursos televisivos. Hay ruedas de la fortuna de distintos formatos. En este caso vamos a programar una rueda clásica de forma vertical.
Si no conoces Scratch, te recomiendo el primer artículo de Mentes Liberadas donde expliqué de qué se trata: Scratch, aprende a programar con este lenguaje visual.
El programa final de ejemplo
Puedes encontrar en este enlace el programa en Scratch que vamos a hacer. Allí podrás correr la simulación, mirar cómo está hecho el programa, modificarlo y también usarlo para jugar.
Ten en cuenta que este programa quizás resulte un poco difícil de entender y seguir para niños y niñas pequeñas. Esto es porque involucra algunos conceptos de física. Lo recomiendo para jóvenes de más de 10 años. Más allá de la edad y la experiencia que tengas con esta plataforma, si aún no has hecho el programa del dado virtual en Scratch, te recomiendo que comiences por ahí primero.
Los gráficos necesarios
Para poder realizar este programa es necesario contar con dos gráficos. Uno lo puedes dibujar en Scratch porque se trata de algo muy simple. El otro, si tienen ganas y tiempo, también lo puedes dibujar. Si no, puedes buscar uno en internet o, mejor, usar el que voy a usar de ejemplo.
La aguja
En primer lugar, vamos a necesitar una aguja que marque la posición final de la rueda. Esto es algo tan simple como dibujar un palito en Scratch. Este gráfico no se moverá en ningún momento. De lo único que se tienen que preocupar es que se vea bien y que esté derecho. Recuerda que en Scratch puedes mantener apretado Shift a la hora de dibujar para que las líneas salgan rectas.
La rueda de la fortuna
En segundo lugar, vamos a necesitar la rueda de la fortuna propiamente. Consiste en un gráfico con secciones radiales que indiquen distintos puntajes, premios o castigos. La puedes dibujar o puedes buscar en internet gráficos de este estilo. Ten en cuenta que es necesario que estén en formato PNG con transparencia.
Aquí te dejo la rueda de la fortuna que voy a usar en este ejemplo:
Para esta pieza gráfica lo más importante es determinar donde estará su centro y cómo rotará. Recuerda que Scratch permite tres tipos distintos de rotación.
El centro de la figura tiene que ser el centro geométrico de la rueda.
El tipo de rotación debe ser el primero de todos los que aparecen.
Los conceptos de física detrás de la rueda de la fortuna
Nuestra rueda de la fortuna, antes de ser «de la fortuna», es una rueda común y corriente. Esto significa que tiene una estructura circular y que gira sobre un eje.
En nuestro caso, lo que haremos es simular el funcionamiento de una rueda que gira. Para realizar esto necesitamos valernos de la física. Ten en cuenta que el conocimiento de esta ciencia es fundamental cuando queremos realizar programas que imiten la dinámica del mundo real.
Velocidad y aceleración
Cuando un cuerpo se mueve, pensemos por ejemplo en un automóvil, este avanza una serie de metros en cuestión de segundos. A la magnitud que mide este avance de distancia recorrida en función del tiempo, la conocemos como velocidad.
Este es un concepto muy familiar para todos. Estamos acostumbrados a hablar de kilómetros por hora cuando nos referimos a movimientos de vehículos o incluso cuando corremos.
Hay otra magnitud que se relaciona con la velocidad y que es muy importante de comprender porque la afecta directamente. Se trata de la aceleración. La aceleración es el cambio de velocidad. Cuando un automovilista pisa el acelerador de su vehículo, está provocando un incremento de la velocidad y cuando pisa el freno, un decremento. Hablamos en ese caso de aceleración y desaceleración.
¿En qué se relaciona esto con la rueda de la fortuna? En que vamos a comenzar el giro de la rueda con una velocidad determinada, y cada vez vamos a querer que la rueda se vaya moviendo más lento. Por lo tanto, vamos a necesitar una desaceleración (o aceleración negativa) que vaya afectando a la velocidad para que esta sea cada vez menor (hasta un límite determinado).
Sin embargo, una persona corriendo, un automóvil o un avión se mueven siempre de forma líneal. Sea hacia adelante o hacia atrás. Pero nuestra rueda de la fortuna no se mueve así. En vez de desplazarse, rota. ¿Cómo podemos manejar entonces su movimiento?
Velocidad angular y aceleración angular
Así como los cuerpos que se desplazan pueden tener velocidad y aceleración, los que giran tienen las equivalentes, velocidad angular y aceleración angular.
En el caso de la velocidad angular, en vez de medir distancia recorrida por unidad de tiempo, vamos a considerar ángulo recorrido por unidad de tiempo. Es decir, el ángulo recorrido en función de tiempo transcurrido.
Por su parte, la aceleración angular es la variación de la velocidad angular en un lapso de tiempo determinado.
Es decir que para poder realizar nuestra rueda de la fortuna podremos usar estos dos conceptos. Cada uno de ellos estará representado por una variable.
El programa de la rueda de la fortuna en Scratch
El objetivo
Como siempre les aclaro en este espacio, es muy importante tener bien claro qué es lo que queremos que ocurra. Para este programa vamos a hacer que en cuanto comience, cada vez que el usuario presione la barra espaciadora, la rueda gire con una velocidad inicial determinada al azar y se vaya deteniendo de a poco hasta quedar en un lugar determinado.
El programa tiene que quedar siempre esperando a que el usuario presione nuevamente la barra para comenzar a girar la rueda de nuevo.
El control
Lo primero que vamos a armar es la estructura de control que involucra la interacción con el usuario. Nos referimos a cuando el usuario presiona la barra espaciadora y da comienzo al giro. Tenemos que hacer que eso se repita siempre. Al comienzo también podemos aprovehar para hacer ajustes gráficos. Por ejemplo, determinar el tamaño de la rueda, o su posición inicial.
Como ves, al presionar el botón de la bandera, lo primero que vamos a hacer es determinar el tamaño de la rueda porque en mi caso, no entraba en pantalla. Luego, una estructura de control de tipo Por siempre, combinada con una espera de tocar la tecla espacio. A partir de ese bloque, dentro del Por siempre, deberá estar nuestro programa de rotación de la rueda.
La rueda de la fortuna en movimiento
Para poder mover la rueda de la fortuna, vamos a tener que representar las magnitudes que mencionamos anteriormente: la velocidad angular y la aceleración angular. Como en este caso la aceleración será negativa, vamos a llamarla directamente desaceleración. Creamos dos variables con estos nombres.
Lo primero que tenemos que fijar es un valor inicial a la desaceleración. Esta aceleracion será fija y no cambiará en el resto del programa. Podríamos decir que se trata entonces de una constante.
Sin embargo, en algún momento del programa hay que definir el valor que tendrá por siempre. Este tipo de inicializaciones es preferible realizarlo antes de comenzar el algoritmo principal. Así que fijaremos la desaceleración al principio.
El valor que le pondré es de 2, porque será la medida en que decrementará la velocidad inicial que veremos a continuación. Pero primero veamos el programa con la inicialización de la desaceleración.
Acelerando la rueda
A continuación, lo que vamos a hacer es mover la rueda. Para ello, vamos a definir una velocidad angular determinada y hacer un bucle que vaya haciendo rotar la rueda. En ese mismo bucle, iremos restándole a la velocidad angular el valor de la aceleración. De esta forma, la rueda se irá moviendo cada vez más lento hasta detenerse. Precisamente, nuestro bucle finalizará cuando la velocidad angular esté por debajo del cero.
Veamos entonces los siguientes pasos de a uno. Primero, fijamos la velocidad angular a un valor cualquiera. Supongamos, 30.
A continuación, creamos un bloque repetir hasta que y en la condición ponemos que la velocidad angular sea menor a 0. ¿No deberíamos poner que la velocidad angular sea 0? Sí, pero como vamos a hacer restas con distintos valores, puede que en algunas vueltas nos pasemos del cero y eso haría que la condición no se cumpla nunca.
Como sabemos que vamos a restar, en algún momento estaremos por debajo del cero y allí saldremos del bucle. También podríamos chequear si estamos en cero o por debajo (con una conjunción), pero para mantener la simpleza del programa, dejaremos solamente una comparación de menor a cero.
Ahora, ¿qué tenemos que hacer dentro del bucle? ¡Hacer rotar la rueda! ¿Y cuánto debe rotar? ¡Lo que la velocidad angular nos diga! Veamos como queda el programa siguiendo esta pauta.
Si incluimos esta instrucción en el bloque principal de control que teníamos obtendremos el siguiente programa.
Si presionan el botón de la bandera para dar comienzo al programa y luego la barra espaciadora, verán que la rueda de la fortuna comienza a girar muy rápidamente… ¡pero no se detiene!
Desacelerando la rueda
Ahora que la rueda se mueve vamos a hacer que se detenga, pero de a poco. Entra en escena la desaceleración. Luego de girar la rueda vamos a modificar la velocidad angular, restándole la desaceleración.
De esta forma, el programa nos queda de la siguiente manera.
Al comenzar el programa y apretar la barra ya veremos que la rueda gira y se va frenando hasta quedar inmóvil. ¡Excelente! Lo hemos logrado.
Pero… algo no anda bien. Si presionamos la barra varias veces vamos a ver que la rueda cae siempre en los mismos lugares. Nuestra rueda de la fortuna es super predecible y por lo tanto, no nos sirve. Tenemos que buscar un mecanismo que la haga impredecible. Algo que esté librado al azar…
Velocidad inicial al azar
El factor de azar que vamos a introducir en el programa será cambiar la velocidad angular inicial. Si no sabemos cuál será este valor, entonces no podremos saber dónde va a terminar deteniéndose la rueda. Hacer esto es muy fácil. Basta con utilizar un bloque de números al azar y ubicarlo en el bloque que fija la velocidad angular inicial.
El programa completo queda de la siguiente manera.
Ahora si volvemos a presionar la barra espaciadora veremos que ya no podemos predecir exactamente donde se detendrá la rueda.
Hasta aquí podríamos darnos por satisfechos. Hemos creado una rueda de la fortuna que funciona y que podemos utilizar. Sin embargo, siempre hay alguna mejora para hacer.
El movimiento real de la rueda de la fortuna
Si alguna vez has visto este tipo de ruedas en acción, habrás notado que no rotan exactamente como lo hace la del programa que acabamos de armar. Las ruedas de la fortuna de los programas de televisión comienzan moviéndose igual, pero al final, lo hacen de forma más lenta, aumentando el suspenso.
¿Cómo podríamos imitar ese movimiento para hacer nuestra rueda de la fortuna más realista? Así como variamos la velocidad, vamos a hacer lo mismo con la aceleración.
Con una sutil modificación del programa, vamos a fijar la desaleración inicial a 2 ya dentro del bucle por siempre. Y luego, dentro del bucle que hace rotar la rueda, vamos a ir reduciendo la desaceleración, hasta que llegue a 0,1. Los valores que elegí son arbitrarios y surgieron de la prueba y el error.
Esto significa que la desaceleración comenzará en 2 y luego se irá haciendo cada vez más pequeña en cada movimiento de giro… 1.9, 1.8, 1.7… hasta llegar a 0.1. Esto hará que al final, la rueda no se frene tan rápido. Allí ya dejamos que se quede en ese valor. Si dejáramos que llegue a cero, la rueda no se detendría.
El programa completo debe quedar de la siguiente manera:
Si ahora probamos presionar la barra, veremos que nuestra rueda de la fortuna tiene todo el suspenso que queríamos. Puedes cambiar los valores que usé para este ejemplo y ver los efectos que generan en el movimiento de la rueda.
Conclusiones
Con el programa que hemos creado en este artículo, pudimos simular el movimiento de rotación de una rueda. Para lograr esto, utilizamos los conceptos de física de velocidad angular y aceleración angular.
Nota que el programa es bastante corto. Esto es así porque Scratch nos lo hace fácil brindándonos el bloque de giro. En otros lenguajes de programación podría haber sido mucho más difícil realizar este programa.
Hasta aquí hemos llegado con la rueda de la fortuna en Scratch. En la próxima entrega vamos a jugar con los números y a aprender a determinar si un año es bisiesto o no.
Nuevo canal de YouTube con tutoriales de Scratch
Después de un tiempo, finalmente me decidí a crear mi propio canal de YouTube donde explico cómo programar con Scratch. Suscríbete siguiendo este enlace y activa la campanita para enterarte cuándo hay un nuevo video. Iré agregando videos de a poco.
Más contenido en Mentes Liberadas
Esto ha sido todo por este artículo. Espero que haya sido de tu agrado.
Te invito a que sigas a Mentes Liberadas en las redes sociales. Estamos en Facebook, Instagram, Pinterest y X.
También te puedes suscribir a nuestro newsletter para recibir las novedades del sitio en tu correo electrónico.
Por último, puedes hacer una donación a Mentes Liberadas a través de nuestra cuenta en Ko-Fi. De esta manera, estarás contribuyendo con el sitio, para que haya más contenido, más recursos, más herramientas online.
Gracias por tomarte el tiempo de leerme.
Te espero en el próximo artículo de Mentes Liberadas.