¿De Qué Va?
En este proyecto, crearéis un juego para la micro:bit. Usando los botones, el jugador moverá un escudo para atrapar meteoritos que caen y salvar la Tierra.
Las técnicas que aprenderéis en este proyecto se pueden utilizar para hacer muchos otros juegos para la BBC micro:bit o equivalentes, como, por ejemplo, los clásicos Pong y Space Invaders.
¿Qué Debéis Saber?
Los que estéis familiarizados con algún lenguaje de bloques como Scratch, y hayáis utilizado bucles para siempre, bloques condicionales Si… y variables os sentiréis cómodos haciendo este proyecto.
También animamos a quienes nunca hayan programado a probarlo. Es divertido y las instrucciones paso a paso explican cómo funciona el código mientras avanzáis.
Los programadores experimentados podéis avanzar y construir los scripts que se muestran en la sección Todos los Scripts para tener el juego funcionando lo antes posible. Después podéis explorar las sugerencias de remix o pensar en vuestras propias mejoras.
¿Qué Necesitáis?
Una placa BBC micro:bit:
También necesitaréis un ordenador con un puerto USB, un cable USB para conectar la micro:bit al ordenador y el software (libre) MicroBlocks.
Procedimiento
Paso 1: Crear el Escudo
En este juego, el jugador usará los botones A y B para mover un escudo a derecha e izquierda para proteger la Tierra de la caída de meteoritos. El escudo será un led iluminado en la pantalla de 5 x 5 leds y siempre estará en la fila inferior. Tendréis que controlar a qué distancia está del margen derecho o izquierdo. Los leds están numerados del 1 al 5 de izquierda a derecha. Es necesaria una variable para guardar la posición del escudo.
¿Qué es una Variable?
En programación, una variable se usa para recordar un valor para poder usarlo más adelante. Se puede insertar un bloque redondeado con el nombre de la variable en cualquier lugar donde se pueda escribir un valor. Por ejemplo, si tenéis una variable score, podéis usarla con el bloque di:
Podéis usar el bloque aumenta en para incrementar el valor en 1:
Podéis usar el bloque asigna a para restablecer la puntuación a cero al comienzo del juego:
Con la micro:bit conectada, podréis hacer clic sobre una variable para ver su valor. Al lado de la variable aparecerá un pequeño globo con su valor.
No os preocupéis si las variables son un concepto nuevo para vosotros; veréis cómo funcionan a medida que avanzáis.
Para crear una variable, haced clic en la categoría Variables a la izquierda de la pantalla MicroBlocks y, a continuación, haced clic en el botón Crear una variable.
MicroBlocks os pedirá el nombre de la variable. Introducid shield x y haced clic en el botón Aceptar.
Un nuevo bloque shield x aparecerá en la categoría Variables. En el programa usaréis este bloque para guardar la posición del escudo. Haced clic en este bloque para ver su valor actual:
¿Algún Problema?
Comprobad que la micro:bit esté correctamente configurada y conectada. El círculo indicador de conexión debe ser verde. Si no lo es, verificad que hayáis instalado el firmware en la placa micro:bit, que la micro:bit esté conectada al ordenador con un cable USB y que no tengáis un cable USB en mal estado o solo de carga.
Ahora, añadid un script para hacer que el escudo aparezca en la pantalla LED. Arrastrad la imagen inferior a MicroBlocks o montad bloques para obtener un script como este:
Cuando el script tenga los bloques anteriores, haced clic en el botón de ejecución en forma de triángulo que está en la parte superior derecha de la pantalla. Una línea de color amarillo rodeará los bloques del script para indicar que se está ejecutando.
Se encenderá un LED en medio de la fila inferior:
Paso 2: Mover el Escudo
Arrastrad un bloque aumenta var en 1 desde la categoría Variables, seleccionad shield x en el menú y haced clic en el bloque:
Si todavía tenéis el script en funcionamiento, veréis cómo el led se desplaza una posición hacia la derecha. Podéis usar esta idea para mover el escudo a la derecha cuando se presione el botón B:
Cuando hayáis construido el script, haced clic en el botón de ejecución y después pulsad el botón B (derecha) de la placa micro:bit. El led encendido se mueve hacia la derecha. ¡Viva!
¡Pero esperad! Después de desplazar el LED encendido unos cuantos lugares hacia la derecha, desaparece. Parece que el programa tiene un error.
Depuración
No os preocupéis. Incluso los programadores profesionales más expertos escriben código con errores. La búsqueda y corrección de errores forma parte del proceso normal de programación, de la misma manera que la corrección ortográfica y gramatical forma parte del proceso de escritura. Depurar es divertido. Como un detective, buscad pistas, y como un científico haced experimentos para aprender más sobre el error.
En este caso, hacer clic en el bloque shield x nos proporciona una pista valiosa:
Este número es mayor que 5. Dado que la matriz LED de micro:bit solo tiene 5 leds de ancho, eso significa que el escudo se ha movido más allá del borde derecho de la pantalla. Para comprobar esta teoría, estableced shield x a un número entre 1 y 5:
El led encendido reaparecerá. Haciendo clic en el botón de ejecución también volverá a aparecer porque el primer bloque del script establece el valor de shield x a 3. (Alguien pensó en el futuro cuando incluyó ese bloque!)
Para corregir el error, usad un bloque si de manera que el escudo solo se mueva a la derecha si esto no hace que salga de la pantalla:
Ahora construid un script similar para que el botón A (izquierda) desplace el escudo hacia la izquierda:
Para comenzar a hacer este script podéis duplicar el del botón B. Haced clic con el botón derecho del ratón al comienzo del script botón B y seleccionad duplicar hasta abajo.
Tened en cuenta que el script del botón A es una especie de versión espejo del script del botón B. Aumenta shield x en -1 y el bloque si asegura que shield x siempre sea mayor que uno; es decir, que el escudo tenga espacio para moverse un paso a la izquierda sin salir del borde de la pantalla.
Haced clic en los botones y probad a mover el escudo hacia la derecha y hacia la izquierda. No debería desaparecer aunque intentéis ir más allá de los límites de la pantalla.
Hasta ahora todo bien. Pero el escudo se mueve demasiado lento para poder atrapar un meteorito que cae a toda velocidad.
Para acelerar las cosas, en el bloque espera 500 milisegundos, cambiad el valor a uno más pequeño, por ejemplo 50 o 100.
Tened en cuenta que si ponéis un número demasiado pequeño, como 5, el escudo irá de un lado a otro demasiado rápido y será difícil pararlo en algún sitio del medio. Experimentad para encontrar un valor que vaya bien.
Paso 3: Añadir Meteoritos que Caen
Vamos a añadir un meteorito que comience en la parte superior de la pantalla led y caiga hacia abajo. De igual manera que el escudo, hará falta una variable para controlar su posición horizontal. También hará falta otra variable para controlar su posición vertical. Usad el botón Crear una variable para añadir las dos nuevas variables: meteor x y meteor y. Acabaréis teniendo tres variables:
Añadid este script para hacer que el meteorito caiga:
Este script establece la posición horizontal del meteorito a un número aleatorio entre 1 (extremo izquierdo) y 5 (extremo derecho). La variable meteor y se establece en 0 de manera que comienza justo por encima de la pantalla LED. Las filas de la pantalla LED están numeradas del 1 al 5 de arriba a abajo. Los bloques del bucle para siempre aumentan el valor de meteor y, haciendo que el meteorito se mueva hacia abajo fila por fila, luego espera 200 milisegundos (0,2 segundos) para que no caiga demasiado rápido. Cambiar este tiempo de espera hará que el meteorito se desplace más lento o más rápido.
Añadid un bloque al script que dibuja el escudo para que también dibuje el meteorito:
Para probar estos cambios, haced clic en el botón de ejecución unas cuantas veces. Deberíais ver un meteorito aparecer en un lugar aleatorio en la parte superior de la pantalla de leds y moverse hacia abajo hasta desaparecer por la parte inferior.
Pero hay un problema. No queremos que el juego acabe después de un solo meteorito. Queremos que los meteoritos sigan cayendo mientras el jugador pueda atraparlos. Para solucionar este problema, utilizaremos un bloque si para detectar cuando el meteorito ha caído de la parte inferior y volver a empezar desde arriba:
Elegir entre Múltiples Soluciones
¿Por qué el script compara meteor y con 7? Después de todo, el meteorito estará fuera de la pantalla tan pronto como el valor de meteor y sea superior a 5.
Hacer que este número sea un poco mayor que 5 deja una pequeña pausa entre la caída de los meteoritos. Este mismo efecto se podría haber conseguido con un bloque espera milisegundos. A menudo hay muchas maneras de resolver un problema determinado y una de las partes creativas de la programación es decidir qué solución usar.
Insertad este bloque si en el script que hace caer el meteorito:
Haced clic en el botón "play" para probar esta versión.
Paso 4: Añadir la Detección de Colisiones
El juego ahora tiene los meteoritos que caen y un escudo que se mueve con los botones, pero no pasa nada cuando el meteorito toca el escudo. Se necesita añadir lo que los programadores de juegos llaman detección de colisiones.
¿Cómo podemos saber cuándo el escudo ha bloqueado un meteorito? Se deben cumplir dos condiciones. En primer lugar, el meteorito debe haber llegado a la parte inferior de la pantalla:
En segundo lugar, el escudo y el meteorito deben estar en la misma posición izquierda-derecha:
Estas dos comprobaciones se pueden combinar mediante un bloque y:
El bloque y se puede usar en un bloque si para hacer que pase algo cuando se detecta una colisión, como mostrar una explosión de estrellas:
Añadid este si al script de dibujo:
Resumen: Todos los Scripts
¡Felicidades por completar el juego! Ahora sois programadores de juegos de micro:bit experimentados.
Aquí tenéis todos los scripts del juego:
Haced clic en el botón de reproducción y probad el juego. Mientras jugáis, pensad si el juego es demasiado fácil o demasiado difícil. ¿Los meteoritos caen a la velocidad adecuada para ser un reto pero no es imposible atraparlos? ¿El escudo se mueve a una buena velocidad? Si no es así, ¿qué cambios podríais hacer para tener una mejor sensación?
¿A Continuación?
Podéis desconectar vuestra micro:bit del ordenador, conectar una batería y jugar a este juego en cualquier lugar.
Poneos a prueba y a vuestros amigos para ver cuántos meteoritos podéis atrapar.
Variantes
Echad un vistazo a las siguientes propuestas de variaciones del juego para añadir funciones adicionales que podríais incluir, o bien pensad en mejoras de vuestra invención. Incluso podéis usar lo que habéis aprendido para hacer versiones para micro:bit de otros juegos, como Pong o Space Invaders.
Variante 1: Detectar el Fin del Juego
Sería fantástico que el juego terminara cuando los jugadores fallen varios meteoritos. Aquí tenéis una manera de hacerlo.
Cread una nueva variable llamada misses y añadid un bloque al script de dibujo para poner misses a cero cuando comience el juego.
Ahora añadid otro bloque si al script de dibujo:
Cuando los usuarios fallen un meteorito, aumentará la variable misses en una unidad. También aumentará meteor y en una unidad — esto evita que este código se ejecute más de una vez por cada fallo. Finalmente, si misses es mayor que tres, mostrará una "X" y se detendrá el juego. Aquí tenéis el script de dibujo modificado:
Variante 2: Puntuación
¿Cómo controlaríais cuántos meteoritos ha atrapado el jugador? Sí, con otra variable. Recordad poner la puntuación a cero al principio del juego. Cuando el juego acabe, podría mostrar un símbolo en función de la puntuación para indicar cómo le ha ido al jugador. Por ejemplo, podría mostrar una cara sonriente si el jugador ha conseguido más de 10 puntos.
Variante 3: ¡Más Difícil!
Una forma de hacer el juego más difícil es hacer caer los meteoritos más rápido. ¿Podéis averiguar qué bloque espera milisegundos controla la rapidez con la que caen los meteoritos? Probad diferentes números para ver a qué velocidad podéis hacer caer los meteoritos y aún poder atraparlos.
Si habéis añadido una variable de puntuación, por ejemplo score, quizá podríais aumentar la velocidad de caída de los meteoritos a medida que el jugador consiga más puntos.