Con la excusa del 14 de Febrero, he adaptado un pequeño juego que estaba programando a la temática de Cupido. Disponemos de 30 segundos para atravesar con flechas la mayor cantidad de corazones posible. Para ello utilizaremos un arco y apuntaremos hacia los corazones utilizando los cursores izquierda y derecha. Lanzaremos las flechas pulsando la barra espaciadora. ¿Quieres probar?. Pues manos a la obra:
Conocimientos previos
El juego utiliza bloques comparativos, variables globales, repeticiones, condicionales, clones y números aleatorios. No es recomendable como ejercicio de iniciación, aunque su dificultad global no es alta.
Objetivos
- El juego mostrará corazones por la pantalla en posición y tamaño aleatorio.
- El jugador lanzará flechas hacia ellos y si los alcanza, el corazón se dará por conquistado, mostrandose roto y desapareciendo finalmente.
- Cuando la flecha llega al final de la pantalla, desaparece y vuelve a situarse en el arco, lista para ser lanzada de nuevo.
- Cada vez que un corazón es alcanzado por una flecha, la variable que controla la puntuación aumenta en 1 su valor.
- Desde que aparece el primer corazón en pantalla, el cronómetro descuenta tiempo hasta que llega a 0 segundos, momento en que termina la partida.
Objetos
Necesitaremos un arco, una flecha, un corazón y un marco. La razón de que situemos tanto la flecha como el corazón apuntando a la derecha evita problemas a la hora de mover estos objetos. Scratch interpreta que los objetos apuntan siempre hacia su derecha. Si hubiésemos dibujado la flecha apuntando hacia arriba, al pedir que se moviera lo haría de costado. Por otro lado, la dirección 0 (o ángulo cero grados) en Scratch apunta hacia arriba, mientras que en la geometría clásica que hemos estudiado, el ángulo 0 gracos apunta hacia la derecha. Hechas estas salvedades, continuamos con el resto de objetos. El arco simplemente nos marca la posición desde la que saldrán las flechas. Es un objeto meramente decorativo, aunque al final os propondré algún reto relacionado con él. Finalmente, el marco nos servirá para delimitar el campo de movimiento de las flechas.
Programación
Comenzaremos con la flecha. La situaremos en su posición de inicio en cuanto se presione la bandera verde. Además, hacemos un bocadillo con los bloques morados mostrar y esconder y esperar hasta que (a que el tiempo se agote) en cuyo instante, la flecha se ocultará sin importar donde se encuentre y se detendrán todas las rutinas asociadas.
En cuanto al movimiento, abriremos bloques especiales para responder ante las pulsaciones de la barra espaciadora (lanzamiento) y los cursores laterales (giro). Con el espacio, la flecha comenzará su movimiento, comprobando mediante un bucle si toca en algún momento el marco. Cuando se cumpla la condición, volverá a la posición de salida.
En el giro, os pondré el ejemplo de la flecha derecha. Para la otra dirección solo tendréis que cambiar números. Como veréis, hay una doble condición que se debe cumplir para que nos permita girar la flecha. Por un lado, el ángulo en que se encuentre en ese momento no sea mayor de 70, ya que saldría disparada casi horizontal (90 grados). La otra es que la flecha se encuentre en la posición -180 de Y. Si no fuera así, podríamos girar la flecha en pleno vuelo. Si queréis experimentar, os animo a eliminar las condiciones (dejado solo el bloque girar) y estableced las que se os ocurran.
Continuamos con el fondo. Más allá de haber elegido una fotografía alegórica de San Valentín, la única misión que tiene es la de servir como cronómetro en la partida. Tan pronto como presionemos la bandera verde, se asigna un valor de 30 (serán segundos) a la variable Tiempo. Después espera un par de segundos a que el jugador se haya preparado y se inicia un bucle repetir hasta que, dentro del cual, cada segundo que pasa se resta de la citada variable Tiempo. Como habréis entendido, durante la ejecución del bucle tiene lugar la partida.
Y por fin llegamos al meollo del programa, el corazón. Esta programación es la que entraña más dificultad de modo que la dividiremos en varias partes. Comenzaremos por el evento bandera verde. Cuando comience el programa, se asignará valor 0 a la variable Puntuacion (obvio dado que comienza la partida). Escondemos el corazón hasta que le toque salir a escena y esperamos un par de segundos a que el jugador se prepare. A partir de entonces, el desarrollo de la partida pasa por un bucle repetir hasta que en el que cada segundo que pase se crea un clon del objeto corazón. La condición para que el bucle se termine es, obviamente también, que el tiempo llegue a 0, momento en el que todos los programas asociados se detienen.
Nos toca hablar de clones. Un recurso de programación largamente esperado en Scratch y que vamos a explotar en este jueguecillo. Existe un evento denominado Cuando comience como un clon, que define el comportamiento de cada uno de las copias que aparezcan del objeto clonado. Aunque las siguientes 3 imágenes se muestren por separado, en realidad sus ladrillos forman un solo bloque. En la primera parte nos encargamos de situar al globo (clon) en escena, apuntando en la dirección correcta, eligiendo su disfraz adecuado y posicionándolo en un lugar aleatorio de la pantalla (dentro de unos límites), con un tamaño y color también al azar. Cuando ya lo tenemos listo, lo mostramos.
El siguiente paso controla la vida del corazón, lo que ocurre mientras espera a ser atravesado por una flecha o se acabe el tiempo de la partida. Un bucle que se repetirá hasta que una de esas condiciones se cumpla, tiene en su interior unos pocos ladrillos que sirven para simular el típico tintineo de los globos flotando en el aire.
El último bloque se ejecuta cuando alguna de las condiciones del bucle anterior se ha cumplido. Analizaremos las posibilidades y actuaremos en consecuencia. Si el tiempo se ha agotado, la partida acaba y haremos desaparecer el clon. En realidad desaparecerán todos, ya que comparten el mismo código (¿por algo son clones, no?). En el caso alternativo (una flecha lo ha atravesado) se desencadenan varias acciones: por un lado oiremos un sonido tipo pop, haremos que el marcador refleje el acierto, cambiaremos el disfraz por el de CorazonAtravesado y tras un breve lapso de tiempo, desaparece.
Conclusión y retos
El programa ya está terminado. Lo tenéis a vuestra disposición en este enlace. Por si queréis jugar desde aquí:
Se me ocurren varios retos que proponeros. Para empezar, una pantalla de presentación que anuncie el juego y otra que muestre la puntuación obtenida cuando la partida se haya terminado. También se podría añadir código para que el arco se mueva en el mismo ángulo que la flecha, regresando a su posición inicial para el siguiente disparo, e incluso dibujar otro arco con la cuerda tensada y generar una pequeña animación que simule un disparo de flecha más realista. Podemos añadir un sonido de fondo cuando se lance la flecha (https://www.freesound.org/)… ya sabéis que el límite lo ponéis vosotros.
Espero que os guste y os sirva como inspiración para otros programas.