El proyecto Scratch de los viernes (XIII): Space Invaders

6 min. de lectura
El Proyecto Scratch De Los Viernes (Xiii): Space Invaders 5

Quién no ha jugado alguna vez en su vida a Space Invaders, uno de los grandes clásicos de los videojuegos de los 80. Esas naves espaciales, esos marcianitos, esos movimientos... son reconocidos por cualquiera con una mínima experiencia en este mundillo. Pues resulta que podemos crear un divertido de Space Invaders en Scratch, y de forma muy fácil.

Volvemos a la carga con un nuevo proyecto Scratch de los Viernes en el que te contaremos cómo empezar a enfocar el proyecto. Qué objetos necesitas, cómo han de moverse e interaccionar, así como por supuesto una serie de consejos para continuar evolucionando el proyecto. ¿Un Space Invaders en Scratch? Veamos cómo.

¿Cómo era Space Invaders?

Antes de comenzar, un vídeo recordatorio de cómo era Space Invaders que nos recordará y ayudará a traerlo a Scratch:

Y ahora sí, comencemos.

Primero, la nave

El elemento clave de Space Invaders es la nave, que se mueve en horizontal y siempre está situada en la parte inferior. Tan sencillo como buscar o crear nuestra propia imagen de la nave, llevarla a las respectivas coordenadas (que por ejemplo, al pulsar la bandera verde se coloque) y ya está.

Si queremos mover la nave con las teclas de flechas de dirección, pues vamos a ello. Al presionar tecla flecha izquierda, cambiar la coordenada X por el valor que queramos; ídem con la tecla flecha derecha.
Pero la nave por si misma no es nada. Es necesario crear una bala con la que disparar a las naves enemigas, que puede ser perfectamente un rectángulo blanco. Es un nuevo objeto con una acción: cuando presionemos una determinada tecla —por ejemplo, espacio— irá a donde esté la nave, apuntará hacia arriba y se moverá hasta que toque el borde. Listo.

Segundo, los enemigos

Space Invaders En Scratch

Para crear las naves enemigas del Space Invaders en Scratch podemos recordar lo que hicimos con el proyecto de Arkanoid, de hace unas semanas: utilizar clones es más complejo, pero lleva a resultados más potentes; si no te atreves, simplemente crea un puñado de objetos que tengan el disfraz del enemigo (échale un vistazo a Google, porque hay GIFs que facilitan la labor).
Lo principal es la posición en la que aparecerán los enemigos. Prueba por ejemplo a colocarlos en fila, uno junto al otro. ¿Cómo? Tan sencillo como que su coordenada y sea la misma, mientras que la x variará según el tamaño de tu objeto. Prueba diferentes posiciones hasta que consigas las agrupaciones que deseas.

Una vez la tengas, tus enemigos tendrán que interactuar con la bala: si tocan la bala, desaparecerán —o el clon será eliminado—, ¿adivinas cómo? Pistas: habrá que comprobar... por siempre, si el enemigo está tocando la bala. Cuando la toque, que se esconda. Fácil, ¿no? Una vez más, recuerda que hay otras muchas soluciones a esta problemática.

Hasta el infinito... y más allá

Ésta es sólo una breve introducción al Space Invaders, que como siempre os planteamos como proyecto base sobre el que continuar mejorando. Cuidado, porque engancha y te puedes tirar media tarde programando... y la otra media, jugando. A continuación unas cuantas mejoras que puedes añadir.

  • El Space Invaders original tiene unos muros de defensa que separan nuestra nave de las enemigas. Prueba a añadirlos y que si los disparas, se vayan desgastando.
  • Falta un elemento clave: que los enemigos disparen. ¿Cómo hacerlo? Si lo has hecho con clones lo tienes algo difícil (por aquí unas pistas); si tienes objetos independientes será más fácil. Piensa en cómo dispara nuestra nave, y por ahí van los tiros.
  • Space Invaders Gif¿Qué ocurre cuando destruimos todas las naves enemigas? Ahora mismo, nada. Crea una variable que vaya contabilizando las naves que destruyes, y cuando las tengas todas, manda un mensaje de que te has pasado el nivel...
  • ... o mejor aún, añade un segundo nivel en el que las naves vayan más rápido, o disparen más. Y un tercero, y un cuarto, y...
  • También falta una nave enemiga que espontáneamente aparecía en la parte superior. Créala de forma que se comporte como en el juego original.
  • Y lo más importante, sé creativo: añade sonidos, parte clave en este juego. También puedes poner distintos colores, muñecos, formas, movimientos... ¡lo que quieras!

El proyecto Scratch de los viernes es la sección en la que, cada quinto día de la semana, proponemos una idea de proyecto y damos algunas pistas para llevarlo a cabo. Hemos hablado de movimientos, figuras geométricas, historias, juegos de preguntas y respuestas, videojuegos… ¿Quieres saber más? Échale un vistazo a las ideas recopiladas en este enlace o al estudio EDUCACIÓN 3.0 en la comunidad de Scratch donde estamos incluyendo nuestros proyectos de los Viernes. Y por supuesto, ¡cualquier propuesta o sugerencia que tengas será bienvenida!

Pablo Espeso

Pablo Espeso Tascón es Ingeniero Informático y coordinador del Club de Jóvenes Programadores de la Universidad de Valladolid (CJP @ UVa)
 

7 Comentarios
  • Hola Pablo.
    Quería felicitarte por tu trabajo.
    Me llamo Carolina, soy profesora de Tecnología.
    profesoracarolinapr.blogspot.com es el blog con el que trabajo en clase con mis alumnos.
    El siguiente enlace es de una entrada en la que hice uso de posts tuyos sobre Scratch.
    Felicidades por el estupendo trabajo que realizas.
    Si no estás de acuerdo con el uso que hice de tu material sólo tienes que decírmelo y lo retiraré.
    De igual forma me gustaría compartir mi blog contigo, por si en algún momento te resulta útil.
    Un saludo.
    Carolina Pérez

  • ¡Hola, Pablo!
    Estoy atascada con el tema de que los aliens disparen, a ver si me podéis echar una mano. ¿Cómo puedo hacer que un sprite (la bala) se dispare desde otro (el alien) elegido al azar? ¿Con listas? ¿Con variables que guarden la posición de cada alien? Entiendo que creamos una sola bala, no una por cada sprite/clon...
    Igual lo estoy mirando desde el lado equivocado y tengo que darle la vuelta.
    Estoy trabajando con las dos ideas: aliens como sprites y aliens como clones.
    ¡Gracias por estos viernes de Scratch!

    • Hola revangel,
      Depende de cómo hayas implementado los aliens, si son clones o sprites. Como me dices que estás creando las dos versiones, te cuento:
      1) Si los aliens son sprites: es la forma fácil, primero tendrás que determinar aleatoriamente a qué sprite va la bala, y luego la “disparas”. Generas un número aleatorio (en un rango entre 1 y el número de sprites alien que tengas) y según sea el resultado, va a un alien u otro; una vez esté en el alien, el movimiento es hacia abajo a la velocidad que le quieras poner.
      2) Con clones la cosa se complica, ya que por defecto la bala irá al último clon generado. Échale un vistazo al wiki oficial que te dará más info
      Lo que yo he hecho es:
      1) La nave que maneja el usuario dispara la bala, no sus clones. Esto es fácil.
      2) Los enemigos disparan clones de la bala, de forma que cuando generan el clon le pasan las coordenadas a través de dos variables, y así la bala sabe dónde tiene que ir.
      Te dejo por aquí el proyecto, por si quieres echarle un vistazo:
      Espero que te haya servido de ayuda.
      Un saludo!!
      Pablo

      • ¡Genial!, muchísimas gracias por tus indicaciones, Pablo. Voy a buscar un rato largo para ponerme a ello y os contaré cuando lo consiga.
        Gracias por estar ahí, animando a chicos y grandes a scratchear y mucho más.

    • Genial! En Scratch, sí. Igual que creas una variable (Datos > Crear una Variable) puedes crear una lista (Datos > Crear una lista).
      Las listas contienen esencialmente variables, es decir, el concepto de lista es que es una lista de variables.

  • Hola, Pablo. Aquí va lo que he conseguido hasta ahora y con tu ayuda Quedan ajustes, sonido, barreras, etc... pero ya se va pareciendo y además ¡parece que funciona! De todos modos, creo que igual se puede hacer con menos código, más eficiente, aunque no se me ocurre cómo. Mil gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *