# Boxoban: Servicio digital de juego de puzles estilo Sokoban/Tecnologías utilizadas

< Boxoban: Servicio digital de juego de puzles estilo Sokoban
A continuación hablaremos sobre las tecnologías usadas para desarrollar el proyecto.

## Canales de comunicación usados

Para poder desarrollar un trabajo necesitamos de canales que establezcan una comunicación efectiva para poder desempeñar las tareas a acometer lo mejor posible. En este apartado describiremos por encima cuales se han empleado y con qué uso:

### Control de versiones para el código fuente

Para poder garantizar el trabajo en paralelo con el código fuente se suele usar aplicaciones para el control de versiones. De tal modo que en nuestro proyecto tenemos un repositorio principal que se encuentra almacenado en Bitbucket, un servidor de alojamiento para proyectos que utilicen el sistema de control de versiones Mercurial o Git.
El motivo de usar dicho servidor y no otros fue que dispone de un número ilimitado de repositorios privados, con la salvedad de que están limitados a un máximo de 5 usuarios (en caso de necesitar mayor cantidad existen cuentas de pago).
Como sistema de control de versiones usamos Mercurial, que es bastante sencillo de manejar y multiplataforma. Si se quiere aprender a usarlo es recomendable leer el siguiente manual.

### Compartición de recursos

Para este fin utilizamos Google Drive para compartir entre los miembros del equipo documentación interna, borradores y recursos del proyecto de forma dinámica. Para no caer en la completa anarquía existe una organización de carpetas, divididas por áreas específicas del desarrollo:
* Análisis: Aquí guardamos documentación producida al analizar aspectos esenciales del juego. El formato de los niveles del juego es un buen ejemplo de lo que se debe almacenar en este lugar.
* Arte: Aquí guardamos todos aquellos recursos artísticos, imágenes y música principalmente, que necesitamos para poder llevar a término el proyecto. También se encuentra documentación y pruebas para definir las pautas a seguir en la realización de dicho material.
* Diseño: Aquí guardamos todo aquello que tiene que ver con el diseño del juego en sí. Hay que hacer notar que diseño en la producción de videojuegos no es lo mismo que diseñar recursos gráficos, en este mundo el término es utilizado para hablar sobre cómo funciona y se comporta nuestro juego, sus reglas, sus niveles, etcétera.
* Producción: Aquí guardamos la documentación interna generada para organizar y producir nuestro producto. Dado que usamos Scrum para el desarrollo, aquí tendremos las actas y los resúmenes de los sprints.
* Recursos: Aquí guardamos todo aquello que es útil para poder desarrollar nuestro juego y que no está desarrollado por nuestro grupo. Por ejemplo tendremos ejecutables, librerías o software adicional que hayamos necesitado para trabajar. ¿Por qué tener una copia guardada en nuestro "disco duro" y no ir a la web a descargarlo de nuevo? Digamos que por una cuestión de "higiene" y organización todo el mundo debería tener la misma versión de las herramientas para trabajar y estar preparados ante la posible eventualidad de encontrarnos que la versión haya desaparecido de su web original por haberse quedado obsoleta.
* Tecnología: Aquí guardamos la documentación relacionada con las tecnologías utilizadas, así como un registro de decisiones de implementación tomadas.

### Organización de la planificación

Para este propósito usamos Trello, que es un gestor de actividades para equipos. Es accesible vía web y destaca por su sencillez extrema. Esta tecnología nos presenta un tablero virtual dónde crear listas en las que meter tarjetas. Las listas tienen forma de columna, pudiendo tener nombre y darle el significado que se quiera. Por defecto el sistema nos propone tres categorías básicas para las listas: "Pendientes", "En curso" y "Terminadas".
Cada tarjeta o nota creada dispone de la siguiente información:
* Nombre: Es asignado por los administradores y busca dar una descripción rápida de la tarea.
* Categoría: Es asignada por los administradores y cada color involucra a un departamento específico.
* Descripción: Inicialmente asignada por los administradores, aunque a medida que se avance con la tarea los miembros involucrados pueden ir modificándola, y busca dar una descripción lo más completa posible de la tarea. Además nos permite añadir links a recursos o a los documentos asociados.
* Fecha de vencimiento: Es asignada por los administradores, para indicar el plazo para el que se espera que la tarea esté finalizada.
* Miembros encargados: Normalmente son designados por los administradores y muestran quienes son los encargados de realizar la tarea en cuestión. Para que sea más práctico se muestra en la tarjeta los avatares de los usuarios implicados. También podemos consultar, con el uso de filtros, qué tareas tiene asignadas un usuario determinado.
* Checklist: Es opcional y es asignado y modificado por los miembros involucrados. Sirve para poder realizar un seguimiento más visible del avance de la tarea.
* Comentarios: Son un canal de comunicación que los implicados en la tarea pueden usar para comunicarse con el propósito que sea necesario.
Trello nos permite utilizar seis colores para designar las categorías/departamentos a la hora de clasificar las tareas. Resulta ser un sistema de colores bastante rápido de identificar y visibles. Además esto también nos permite filtrar las tarjetas para ver qué trabajo tiene que realizar un departamento.
Para organizar la planificación de nuestro juego organizamos las notas en 4 columnas de listas, haciendo cada una de ellas referencia al estado en el que se encuentra la tarea:
* "Para hacer": Son las tareas que van surgiendo a lo largo del proyecto, en base a las necesidades que puedan surgir. Cualquier miembro puede proponer o hacer ver de la necesidad de una determinada tarea futura, esta será situada en la lista y asignada durante las reuniones del equipo en caso de que algún integrante pueda hacerse cargo de ella.
* "Haciendo ahora mismo": Una vez que queda acordado quién va a encargarse de una tarea, los miembros asignados cambian la tarjeta a esta lista. De este modo queda constancia de que se está realizando durante el sprint actual el trabajo asociado a la nota. Una vez acabada la tarea, se ubica en la lista "Revisión".
* "Revisión": Cuando una tarea es terminada se coloca aquí para poder revisar que se han logrado los objetivos marcados y dar el visto bueno definitivo. Si todo ha ido bien se pasa a la lista "Hecho".
* "Hecho": Cuando una tarea ha sido finalizada y revisada, se coloca en esta lista. Esta lista nos permite ver el trabajo terminado hasta la fecha.

## Tecnología empleada para la implementación

El proyecto ha sido desarrollado con las siguientes herramientas/tecnologías:
* Unity3D: Motor gráfico 2D/3D que facilita la creación de videojuegos multiplataforma principalmente. También se puede dar uso para generar contenido multimedia interactivo.
* C#: Lenguaje moderno de programación multiparadigma creado por la empresa Microsoft. Es el lenguaje que utilizaremos en nuestro proyecto al ser uno de los tres lenguajes de scripting empleados en el motor Unity.
* Microsoft Visual Studio 2010: Entorno de desarrollo integrado para poder trabajar a la hora de programar con el lenguaje C#. Aunque Unity por defecto trae incorporado Monodevelop, este resulta ser un entorno mucho menos cómodo que el ofrecido por la herramienta de Microsoft.