¿Te gusta el tenis? Scratch está lleno de ideas. Prácticamente cualquier cosa podemos implementarla en Scratch, y de todos los recursos que existen los videojuegos son ideales a la hora de formar en la programación. ¿Cualquier videojuego? Bueno, seamos realistas: Scratch es una herramienta limitada, y si bien la técnica sí lo permitiría, crear determinadas cosas es algo insostenible.

Pero juegos podemos crear muchos. De hecho, piensa en un juego arcade y podrás llevarlo a Scratch. Los juegos arcade son aquellos de las recreativas de hace unos cuantos años, los de meter una moneda de cinco duros y a disfrutar. Hoy, nuestro proyecto Scratch de los viernes va de juegos, de juegos clásicos y de juegos Arcade: tu primer juego en Scratch.

Se llama Pong, lo llamaremos 'tenis'

Éste forma parte de nuestro catálogo de proyectos iniciales en el Club de Jóvenes Programadores de la Universidad de Valladolid. Uno de tres y posiblemente el más atractivo para muchos chavales, que relacionan la programación directamente con la creación de videojuegos (aunque ya hemos visto que sirve también para otras muchas áreas).

El juego que planteamos hoy se basa en el original Pong, uno de los primeros arcades de la historia lanzado en 1972 con un gran éxito. Su funcionamiento es tremendamente sencillo: dos barras - una para cada jugador - situadas en vertical, una a cada extremo de la pantalla, y una pelota que se mueve por toda la pantalla. El objetivo es que la pelota impacte en cada barra y que si un jugador la deja pasar, pierda.

El contexto

Tenis En Scratch

Podíamos hacer un clon del Pong original, pero aprovechando las posibilidades de Scratch le hemos dado una vuelta para hacerlo más semejante a una realidad que nos rodea: el tenis, que de hecho lo llamamos así comúnmente para que los chavales puedan relacionarlo con el conocido deporte de raqueta.

El funcionamiento es equiparable al del Pong original: permite dos jugadores simultáneamente, cada uno controlando una de las barras, y la pelota se moverá libremente por todo el escenario. Estos son los tres objetos necesarios: dos barras y una pelota.

Llegados a este punto, lo primero que puede hacerse es decorar el proyecto como deseemos. Por ejemplo poniendo el fondo de una pista de tenis, eligiendo colores para las barras de cada jugador o también seleccionando la 'pelota', que puede ser una pelota de tenis tal cual (Scratch la incluye en sus objetos por defecto), una de fútbol, una cara redonda, un botón... lo que prefiramos.

Dando movimiento a las barras

Una vez que tengamos los objetos creados y preparados podemos empezar a implementar la programación. Puede ser una idea interesante realizar un diseño previo que nos permita prever qué interacciones van a existir, entre qué objetos, o cómo se van a mover cada uno de ellos. Esto dependerá del nivel y la edad de los chavales.

Generalmente lo primero es empezar por las barras, que son las más sencillas. La inicialización de las barras - es decir, lo que ocurre en cuanto pulsamos la bandera verde - consiste en:

  • Asignar una posición inicial, generalmente centrada respecto de la vertical (valor de y=0)
  • Con una determinada dirección para que aparezca 'de pie'. Esta dirección varía según hayamos elaborado el disfraz, con lo que cada caso será particular y deberemos resolverlo por separado.
  • También será de ayuda asignar un determinado nombre a cada barra, ya que por defecto se definen como Sprite1 y Sprite2. Podemos llamarlas barra azul o barra roja, o jugador 1 y jugador 2, de forma que siga una nomenclatura lógica que luego nos ayudará a elaborar algunas partes del juego.
Ideas Para Proyectos En Scratch

El movimiento de las barras de jugador es muy sencillo: se mueven arriba y abajo, nada más, según pulsemos determinadas teclas. Como tenemos dos jugadores uno utilizará unas teclas (por ejemplo W y S) y el otro otras (flecha arriba y flecha abajo), utilizando la instrucción al presionar tecla […] (categoría eventos, marrón).

Implementar el movimiento puede hacerse de múltiples maneras, aunque la más sencilla suele ser apuntar y luego mover. Apuntamos en la dirección en la que queremos hacer el movimiento, y luego movemos un cierto número de pasos. Cuantos más pasos más rápida se moverá la barra, y viceversa. Como cambia la dirección es posible que tu barra también gire, perdiendo la verticalidad; en este caso deberás modificar el disfraz o cambiar el estilo de rotación.

Una vez hayamos implementado este código tendremos que probarlo y comprobar que funciona correctamente. En caso afirmativo, podremos continuar con el movimiento de la pelota.

Dando movimiento a la pelota

Las barras de cada jugador ya se mueven correctamente, pero la pelota continúa inerte, en la posición en la que apareció. ¿Qué hacer?

Antes de nada, pensar dónde tiene que aparecer una vez pulsamos la bandera verde, es decir, en cuanto se inicia el juego. La respuesta puede variar, aunque generalmente diremos que empezará en el centro del escenario, es decir, aquel cuyas coordenadas son x=0, y=0.

También deberemos pensar cuál debe ser la dirección inicial de la pelota. Puede ser siempre la misma (que salga, por ejemplo, siempre hacia la derecha), aunque lo ideal es que cada vez tome una dirección diferente. Esto se puede implementar con la instrucción número al azar (categoría Operadores, color verde), eligiendo el rango de grados que nosotros queramos. Lo haremos sencillo para que sea fácil de entender, con lo que pondremos que siempre genere un número entre 60 y 120 (recordad que los ángulos en Scratch son diferentes al cómo lo entendemos en las matemáticas, y que por ejemplo la derecha la toma como 90).

Con esto, la inicialización de la pelota está compuesta por dos elementos:

  • Asignar un punto de inicio (el centro del escenario, es decir, x=0, y=0).
  • Asignar una dirección al azar (en nuestro caso, siempre a la derecha en un rango entre 60 y 120)

Y ya podremos empezar el movimiento de la pelota. Lo que queremos es que por siempre la pelota esté moviéndose, con lo que simplemente tendremos que utilizar un por siempre (categoría Control, color amarillo) y un mover n pasos (categoría Movimiento, color azul), con n el que nosotros queramos. Cuanto más bajo sea el número, más lento se moverá, y viceversa; en otras palabras, ese 'n' es la velocidad de la pelota.

Pero claro, nos enfrentamos con otro problema: la pelota llega al borde del escenario y se queda ahí. Será necesario utilizar una instrucción más, rebotar si toca un borde (categoría Movimiento, color azul) e integrarla dentro de nuestro bucle por siempre para que esté comprobándola... por siempre.

Llegados a este punto nuestra pelota ya se moverá libremente por todo el escenario, y rebotará en los bordes. Pero no rebotará con las barras de cada jugador, ya que esto no son bordes para Scratch (únicamente toman como bordes los del escenario, es decir, la "caja" del juego).

Rebotando con las barras

Tendremos que continuar añadiendo nuevo código a la pelota para comprobar si toca en algún momento la barra. Necesitaremos un 'si... entonces' (categoría Control, color amarillo) y la condición será en mi caso 'tocando [barra roja]'. Dentro podemos meter un mensaje de 'decir' (categoría Apariencia, color morado) para comprobar que funciona correctamente, aunque luego lo modifiquemos

Si probamos nuestro proyecto veremos que cuando la pelota toca la barra dice el mensaje, es decir, es justo en nuestro mensaje 'decir' (que, recuerdo, hemos puesto para probar) cuando tendremos que implementar las instrucciones necesarias para cambiar la dirección de la pelota, como si chocase contra ella. Hay muchas formas de hacer esto de forma más o menos realista, pero aquí tampoco vamos a liar las cosas: invertimos la dirección, es decir, giramos 180 grados en cualquiera de las dos direcciones, ya que el resultado es el mismo.

El resultado del código de la pelota debería ser algo parecido a esto:

Aunque aún no hemos terminado, ya que también habría que añadir la condición de rebote con la otra barra. Para resolverlo podéis basaros en cómo hemos implementado el rebote con la barra roja y hacer algo similar.

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

El tenis tiene innumerables propuestas de mejora. Por ejemplo, hasta donde hemos llegado no pierde nunca nadie, ¿cómo hacer que pierda? Es una (quizá lo siguiente que habría que añadir), pero no la única.

  • Añade una condición para finalizar el juego. Cuando un jugador no devuelve la pelota, pierde. ¿Cómo implementar esto? Puede hacerse de muchas formas, aunque la más sencilla es añadir una pequeña línea detrás de la barra que detecte el fallo. Si la pelota toca esa línea (puede detectarse bien por color, o bien por objeto según cómo hayamos dibujado la línea) se termina el juego.
  • ¿Hacemos varias partidas? Puedes implementar marcadores con variables, uno para cada jugador. Y hacer que gane el que antes llegue a 3 puntos, o el mejor de 5 o 7 partidas...
  • ... pero también puedes limitar cada partida según un determinado número de segundos o minutos, utilizando el cronómetro.
  • ¿Te parece demasiado fácil? Haz que la pelota se mueva cada vez más rápido utilizando una variable. Hemos dado alguna pista en la explicación, más arriba...
  • Y por supuesto, decora el proyecto del tenis como quieras. No tiene por qué ser un juego de tenis, ni una pelota de tenis. Puedes poner una naranja, o hacer que las barras sean raquetas (aunque ojo con la forma). Puedes hacer que se escoja el color de cada jugador (utilizando diferentes disfraces), o que pida sus nombres y luego 'diga' el del ganador en voz alta. ¡Lo que se te ocurra!

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, y hoy un videojuego. ¿Quieres saber más? Échale un vistazo las ideas recopiladas en este enlace y, por supuesto, ¡cualquier propuesta o sugerencia que tengas será bienvenida!