¿Qué son las Code Katas?

«Code Kata» es un término acuñado por Dave Thomas, co-autor del libro «The Pragmatic Programmer», con referencia al concepto japonés de kata en las artes marciales. Una kata de código, más vulgarmente conocida, es un ejercicio de programación que ayuda a un programador a perfeccionar sus habilidades a través de la práctica y la repetición.

Nuestra Primera Kata

En nuestro caso, nos juntamos todos los miembros del equipo y decidimos hacer una kata de Unity, en la que @maktub82 y un servidor @CarlosKlsOne guiamos al equipo para realizar un pequeño ejemplo de juego. El día en concreto, al iniciar la kata, propusimos varias ideas de juegos a elegir, como un plataformas, un runner, un top down shooter y varias opciones más. Con una votación y consenso salió ganador hacer una especie de shooter con plataformas en 2d, al estilo «Metal Slug».

Con esto decidido nos pusimos en marcha.

Desarrollo de la Kata

Os recomiendo leer mi primer Post sobre Unity, dónde se ven conceptos básicos sobre este motor para iniciados, ya que aquí me limitaré a contar como fue el desarrollo de la Kata y no el paso por paso.

Tras una pequeña introducción de lo que ofrece Unity y unas nociones básicas de GameObjects, Components, etc. para los iniciados, empezamos creando el PlayerController, clase con la que controlaremos las acciones del personaje principal:

Como vemos, analizando la clase por partes, es muy sencilla, en ella damos movimiento al personaje mediante las teclas horizontales, que por defecto son la ‘flecha derecha’, ‘flecha izquierda’, ‘A’ y ‘D’:

con esto nuestro personaje se moverá en el eje de las x a la velocidad especificada en la variable ‘Speed’.

Por otro lado controlamos también las teclas de salto y disparo, para que nuestro personaje salte y dispare cuando se pulse las teclas mapeadas, que por defecto son la barra espaciadora y el botón izquierdo del ratón respectivamente.

Para el salto controlamos que no se pueda saltar más de dos veces y para el disparo utilizamos un objeto target para indicar de donde sale la bala en el sprite. Y también llamamos al método Shot(), que hace que la bala se mueva, lo veremos en la clase Bullet.

En esta clase también controlamos las colisiones con otros objetos.

Cuando el personaje colisiona con el suelo reiniciamos el contador de saltos y si colisionamos con un enemigo lanzamos el Game Over y eliminamos al jugador de la escena.

 

Lo siguiente que hicimos es crear la clase para controlar la bala:

Aquí vemos como eliminar la bala de la escena si sale de la vista de la cámara:

Como en la anterior clase, también controlamos las colisiones de la bala con el entorno, para eliminarla si colisiona, y si lo hace con un enemigo aumentar la puntuación, que veremos más adelante. Y también vemos el método Shot() del que hablé antes, se llama cuando el personaje pulsa el botón de disparo.

 

Hasta aquí teníamos un personaje que se movía por las plataformas, saltando y disparando.

Después añadimos una clase muy simple para que la cámara siguiese al personaje:

Accedemos al objeto Player para saber su posición y se la asignamos a la cámara.

 

Para que las balas tuvieran sentido y no disparar a la nada, lo siguiente que hicimos fue crear un enemigo con un movimiento simple que se mueve entre dos puntos en vertical.

No tiene mucho misterio, este componente también sirve para hacer plataformas móviles o ascensores si se trabaja un poco más, para que el personaje se desplace encima de él. Pero en este caso si lo tocas te mata, y si lo toca una bala ocurre al contrario.

Por último, para controlar la escena o el juego en general se suelen crear clases GameController o GameManager, nosotros la hicimos para controlar los objetos del interfaz, la puntuación, el game over y en este último caso para restablecer la escena si acaba el juego.

Y hasta aquí pudimos llegar en esta primera Kata.

El código completo está en este enlace de github.

Experiencia

Tras nuestra primera Kata en equipo, la experiencia ha sido muy positiva, a parte de aprender mucho durante el proceso, resolver dudas, debatir mejores formas de código, etc. nos divertimos mucho y compartimos buenos momentos. Y de esto han salido más ideas de Kata que se irán produciendo a lo largo del tiempo, sobre más tecnologías, y ahondar más en Unity. Quién sabe si en un futuro no sacamos un Triple A de aquí? estad atentos a los avances.

Resultados

Aunque suele haber un guía en las katas, todo el mundo puede aportar ideas y hacer cambios, en este caso tratamos de seguir todos al mismo paso el desarrollo del juego, pero cada uno a su manera, así que aunque todos teníamos un personaje que saltaba y disparaba a un enemigo, los resultados fueron muy diferentes. He aquí las diferentes versiones de algunos de los participantes:

            

 

@CarlosKlsOne